#include #include #include #include #include "WebTexture2D.h" namespace Atomic { class WebTexture2DPrivate : public CefRenderHandler { friend class WebTexture2D; public: IMPLEMENT_REFCOUNTING(WebTexture2DPrivate) WebTexture2DPrivate(WebTexture2D* webTexture2D) { webTexture2D_ = webTexture2D; } bool GetViewRect(CefRefPtr browser, CefRect &rect) OVERRIDE { rect = CefRect(0, 0, webTexture2D_->GetCurrentWidth(), webTexture2D_->GetCurrentHeight()); return true; } void OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) OVERRIDE { webTexture2D_->texture_->SetData(0, 0, 0, width, height, buffer); } private: WeakPtr webTexture2D_; }; WebTexture2D::WebTexture2D(Context* context, int width, int height) : WebRenderHandler(context) { d_ = new WebTexture2DPrivate(this); ResourceCache* cache = GetSubsystem(); texture_ = new Texture2D(context_); texture_->SetSize(width, height, Graphics::GetRGBAFormat(), TEXTURE_DYNAMIC); texture_->SetFilterMode(FILTER_NEAREST); material_ = new Material(context_); material_->SetTechnique(0, cache->GetResource("Techniques/DiffUnlit.xml")); material_->SetTexture(TU_DIFFUSE, texture_); } void WebTexture2D::SetCurrentWidth(unsigned width) { } void WebTexture2D::SetCurrentHeight(unsigned height) { } void WebTexture2D::SetMaxWidth(unsigned width) { } void WebTexture2D::SetMaxHeight(unsigned height) { } WebTexture2D::~WebTexture2D() { d_->Release(); } }