diff --git a/project/include/Hardware.h b/project/include/Hardware.h index a018b789a..6f94d4704 100644 --- a/project/include/Hardware.h +++ b/project/include/Hardware.h @@ -169,7 +169,7 @@ class HardwareRenderer : public HardwareContext virtual void Render(const RenderState &inState, const HardwareData &inData ); virtual void RenderData(const HardwareData &inData, const ColorTransform *ctrans,const Trans4x4 &inTrans)=0; - virtual void BeginDirectRender()=0; + virtual void BeginDirectRender(const Rect &inRect)=0; virtual void EndDirectRender()=0; diff --git a/project/src/common/Display.cpp b/project/src/common/Display.cpp index d290b4601..ffc90e715 100644 --- a/project/src/common/Display.cpp +++ b/project/src/common/Display.cpp @@ -904,10 +904,12 @@ void DirectRenderer::Render( const RenderTarget &inTarget, const RenderState &in { if (inState.mPhase==rpRender && inTarget.IsHardware()) { + RenderState state(inState); + gDirectRenderContext = inTarget.mHardware; - gDirectRenderContext->BeginDirectRender(); Rect clip = inState.mClipRect; clip.y = inTarget.mHardware->Height() - clip.y - clip.h; + gDirectRenderContext->BeginDirectRender(clip); if (gNmeRenderGcFree) { gc_exit_blocking(); diff --git a/project/src/metal/MetalContext.mm b/project/src/metal/MetalContext.mm index 3e0f049f3..fbbbf9637 100644 --- a/project/src/metal/MetalContext.mm +++ b/project/src/metal/MetalContext.mm @@ -967,7 +967,7 @@ void RenderData(const HardwareData &inData, const ColorTransform *ctrans,const T } } - void BeginDirectRender() { } + void BeginDirectRender(const Rect &inRect) { } void EndDirectRender() { } }; diff --git a/project/src/opengl/OpenGLContext.cpp b/project/src/opengl/OpenGLContext.cpp index 25f64e25e..13029004e 100644 --- a/project/src/opengl/OpenGLContext.cpp +++ b/project/src/opengl/OpenGLContext.cpp @@ -478,8 +478,23 @@ class OGLContext : public HardwareRenderer #endif } - void BeginDirectRender() + void BeginDirectRender(const Rect &inRect) { + makeCurrent(); + + SetViewport(inRect); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + + + #ifdef WEBOS + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + #endif + + mLineWidth = 99999; + + gDirectMaxAttribArray = 0; #ifndef NME_NO_GETERROR int err0 = glGetError(); @@ -493,6 +508,9 @@ class OGLContext : public HardwareRenderer for(int i=0;i