diff options
author | Michael Jaumann <meta_dev@yahoo.com> | 2014-12-18 12:11:17 +0000 |
---|---|---|
committer | Michael Jaumann <meta_dev@yahoo.com> | 2015-03-02 12:42:50 +0000 |
commit | b2e71678924e8373d1db1af574af7501200ae702 (patch) | |
tree | f3c15951b35f05ecb15cadbea06ee336302e1df8 | |
parent | 65ab4896697a7c1adb839c52d1aa2d1136d64911 (diff) |
renderSprite
renders still to framebuffer with the wrong offset ( polygon is
clipped, or entire out of texture bounds )
Change-Id: I485fd141c73d1e9783db7f4638bb33875e3af9be
-rw-r--r-- | canvas/source/opengl/ogl_canvascustomsprite.cxx | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx index 9962eb481397..ac8272e548f7 100644 --- a/canvas/source/opengl/ogl_canvascustomsprite.cxx +++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx @@ -25,6 +25,7 @@ #include <basegfx/polygon/b2dpolygontriangulator.hxx> #include <basegfx/polygon/b2dpolypolygontools.hxx> #include <GL/glew.h> +#include <vcl/opengl/GLMHelper.hxx> using namespace ::com::sun::star; @@ -131,42 +132,46 @@ namespace oglcanvas if( ::basegfx::fTools::equalZero( mfAlpha ) ) return true; - const glm::vec2 aSpriteSizePixel( - ::canvas::tools::roundUp( maSize.Width ), - ::canvas::tools::roundUp( maSize.Height )); - RenderHelper* pRenderHelper = maCanvasHelper.getDeviceHelper()->getRenderHelper(); + const glm::vec2 aSpriteSizePixel( + ::canvas::tools::roundUp( maSize.Width), + ::canvas::tools::roundUp( maSize.Height)); + + RenderHelper* pRenderHelper = maCanvasHelper.getDeviceHelper()->getRenderHelper(); IBufferContextSharedPtr pBufferContext; - if( mfAlpha != 1.0 || mxClip.is() ) + + if( mfAlpha != 0.0 || mxClip.is() ) { // drats. need to render to temp surface before, and then // composite that to screen // TODO(P3): buffer texture pBufferContext = maCanvasHelper.getDeviceHelper()->createBufferContext(aSpriteSizePixel); + //glViewport(0, 0,aSpriteSizePixel.x,aSpriteSizePixel.y); pBufferContext->startBufferRendering(); } - // this ends up in pBufferContext, if that one's "current" if( !maCanvasHelper.renderRecordedActions() ) return false; - const glm::mat4 translate = glm::translate(glm::vec3(maPosition.getX(), maPosition.getY(), 0)); if( pBufferContext ) { + //pRenderHelper->SetModelAndMVP( aGLTransform); + // content ended up in background buffer - compose to + // screen now. Calls below switches us back to window + // context, and binds to generated, dynamic texture + + pBufferContext->endBufferRendering(); + const glm::mat4 aGLTransform = glm::mat4( maTransformation.m00, maTransformation.m10, 0, 0, maTransformation.m01, maTransformation.m11, 0, 0, 0, 0, 1, 0, maTransformation.m02, maTransformation.m12, 0, 1 - ); + ); + + pRenderHelper->SetModelAndMVP( translate *aGLTransform ); - //pRenderHelper->SetModelAndMVP(translate * aGLTransform); - pRenderHelper->SetModelAndMVP( aGLTransform); - // content ended up in background buffer - compose to - // screen now. Calls below switches us back to window - // context, and binds to generated, dynamic texture - pBufferContext->endBufferRendering(); GLuint nTexture = pBufferContext->getTextureId(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, nTexture); @@ -212,22 +217,19 @@ namespace oglcanvas } else { - const double fWidth=maSize.Width/aSpriteSizePixel.x; - const double fHeight=maSize.Height/aSpriteSizePixel.y; - std::vector<glm::vec2> vertices; vertices.reserve(4); - vertices.push_back(glm::vec2(0, 0)); - vertices.push_back(glm::vec2(0, (float) aSpriteSizePixel.y)); vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, 0)); vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, (float) aSpriteSizePixel.y)); + vertices.push_back(glm::vec2(0, 0)); + vertices.push_back(glm::vec2(0, (float) aSpriteSizePixel.y)); std::vector<glm::vec2> uvCoordinates; uvCoordinates.reserve(4); + uvCoordinates.push_back(glm::vec2(1, 1)); + uvCoordinates.push_back(glm::vec2(1, 0)); + uvCoordinates.push_back(glm::vec2(0, 1)); uvCoordinates.push_back(glm::vec2(0, 0)); - uvCoordinates.push_back(glm::vec2(0, (float) fHeight)); - uvCoordinates.push_back(glm::vec2((float) fWidth, 0)); - uvCoordinates.push_back(glm::vec2((float) fWidth, (float) fHeight)); pRenderHelper->renderVertexUVTex(vertices, uvCoordinates, color, GL_TRIANGLE_STRIP ); } @@ -235,7 +237,6 @@ namespace oglcanvas glBindTexture(GL_TEXTURE_2D, 0); } - std::vector<glm::vec2> vertices; vertices.reserve(6); vertices.push_back(glm::vec2(-2, -2)); |