diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-08-04 03:40:15 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-08-04 03:40:15 +0400 |
commit | c3b9ec82d0cb1df9b88948e9ff02e2cb80cb89e1 (patch) | |
tree | 311f57d72fc8c381bc31bbe0eaa1d7cc30e91760 /source/gameengine/Rasterizer | |
parent | c212503437045669997f3d8b9f109b74758da412 (diff) |
fix for strange error with BGE 2d filter code,
RAS_2DFilterManager::RenderFilters was casting an int to an unsigned int, then doing a subtraction which would give a negative number.
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r-- | source/gameengine/Rasterizer/RAS_2DFilterManager.cpp | 17 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_2DFilterManager.h | 2 |
2 files changed, 10 insertions, 9 deletions
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp index bfe29a48c69..e85b57f1769 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp @@ -352,7 +352,7 @@ void RAS_2DFilterManager::UpdateOffsetMatrix(RAS_ICanvas* canvas) } } -void RAS_2DFilterManager::UpdateCanvasTextureCoord(unsigned int * viewport) +void RAS_2DFilterManager::UpdateCanvasTextureCoord(const int viewport[4]) { /* * This function update canvascoord[]. @@ -360,12 +360,10 @@ void RAS_2DFilterManager::UpdateCanvasTextureCoord(unsigned int * viewport) * That way we can access the texcoord relative to the canvas: * (0.0,0.0) bottom left, (1.0,1.0) top right, (0.5,0.5) center */ - canvascoord[0] = (GLfloat) viewport[0] / viewport[2]; - canvascoord[0] *= -1; + canvascoord[0] = (GLfloat) viewport[0] / -viewport[2]; canvascoord[1] = (GLfloat) (texturewidth - viewport[0]) / viewport[2]; - canvascoord[2] = (GLfloat) viewport[1] / viewport[3]; - canvascoord[2] *= -1; + canvascoord[2] = (GLfloat) viewport[1] / -viewport[3]; canvascoord[3] = (GLfloat)(textureheight - viewport[1]) / viewport[3]; } @@ -396,14 +394,14 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas) if (num_filters <= 0) return; - const GLint *viewport = canvas->GetViewPort(); + const int *viewport = canvas->GetViewPort(); RAS_Rect rect = canvas->GetWindowArea(); int rect_width = rect.GetWidth()+1, rect_height = rect.GetHeight()+1; if (texturewidth != rect_width || textureheight != rect_height) { UpdateOffsetMatrix(canvas); - UpdateCanvasTextureCoord((unsigned int*)viewport); + UpdateCanvasTextureCoord(viewport); need_tex_update = true; } @@ -432,7 +430,10 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas) // We do this to make side-by-side stereo rendering work correctly with 2D filters. It would probably be nicer to just set the viewport, // but it can be easier for writing shaders to have the coordinates for the whole screen instead of just part of the screen. RAS_Rect scissor_rect = canvas->GetDisplayArea(); - glScissor(scissor_rect.GetLeft()+viewport[0], scissor_rect.GetBottom()+viewport[1], scissor_rect.GetWidth()+1, scissor_rect.GetHeight()+1); + glScissor(scissor_rect.GetLeft() + viewport[0], + scissor_rect.GetBottom() + viewport[1], + scissor_rect.GetWidth() + 1, + scissor_rect.GetHeight() + 1); glDisable(GL_DEPTH_TEST); // in case the previous material was wire diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.h b/source/gameengine/Rasterizer/RAS_2DFilterManager.h index ba74018d36b..a637baa3d09 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.h +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.h @@ -53,7 +53,7 @@ private: void FreeTextures(); void UpdateOffsetMatrix(RAS_ICanvas* canvas); - void UpdateCanvasTextureCoord(unsigned int * viewport); + void UpdateCanvasTextureCoord(const int viewport[4]); float canvascoord[4]; float textureoffsets[18]; |