Explorar o código

Web rendering to a texture via Awesomium

Ivan Safrin %!s(int64=14) %!d(string=hai) anos
pai
achega
d8fc86bc17

+ 46 - 0
Modules/Contents/Awesomium/PolycodeWebView.cpp

@@ -0,0 +1,46 @@
+
+#include "PolycodeWebView.h"
+
+PolycodeWebView::PolycodeWebView(unsigned int width, unsigned int height, String url) {
+
+	this->width = width;
+	this->height = height;
+
+	char *testData = (char*)malloc(width*height*4);
+	renderTexture = CoreServices::getInstance()->getMaterialManager()->createTexture(width, height, (char*)testData, false, Image::IMAGE_RGBA);
+	delete testData;
+
+	webCore = new Awesomium::WebCore();
+	webView = webCore->createWebView(width, height);
+	
+	webView->loadURL(url.c_str());
+	webView->focus();
+}
+
+PolycodeWebView::~PolycodeWebView() {
+	webView->destroy();
+	delete webCore;	
+	delete renderTexture;
+}
+
+void PolycodeWebView::Update() {
+	webCore->update();
+	if(webView->isDirty()) {
+		const Awesomium::RenderBuffer* renderBuffer = webView->render();
+		if(renderBuffer) {		
+			char *dest = (char*)malloc(width*height*4);	
+			renderBuffer->copyTo((unsigned char*)dest, width * 4, 4, true, true);
+		
+			Image *newImage = new Image(dest, width, height, Image::IMAGE_RGBA);
+			renderTexture->setImageData(newImage);
+			renderTexture->recreateFromImageData();
+			delete newImage;				
+			delete dest;
+		}
+	}
+}
+
+Texture *PolycodeWebView::getRenderTexture() {
+	return renderTexture;
+}
+

+ 23 - 0
Modules/Contents/Awesomium/PolycodeWebView.h

@@ -0,0 +1,23 @@
+
+#include <Polycode.h>
+#include <Awesomium/WebCore.h>
+
+using namespace Polycode;
+
+class PolycodeWebView {
+	public:
+		PolycodeWebView(unsigned int width, unsigned int height, String url);
+		~PolycodeWebView();		
+		void Update();
+		
+		Texture *getRenderTexture();
+		
+	protected:
+	
+		int width, height;
+	
+		Texture *renderTexture;
+	
+		Awesomium::WebView* webView;
+		Awesomium::WebCore* webCore;
+};