BGE Bug Fix:#17349, fixes some problems about 2d-filters

This commit is contained in:
Hamed Zaghaghi 2008-07-20 23:03:01 +00:00
parent 9f53999181
commit 5350d5eb2c
6 changed files with 45 additions and 8 deletions

@ -101,6 +101,13 @@ int KX_BlenderCanvas::GetHeight(
return scrarea_get_win_height(m_area); return scrarea_get_win_height(m_area);
} }
RAS_Rect &
KX_BlenderCanvas::
GetWindowArea(
){
return m_area_rect;
}
void void
KX_BlenderCanvas:: KX_BlenderCanvas::
SetViewPort( SetViewPort(
@ -112,6 +119,11 @@ SetViewPort(
int minx = scrarea_get_win_x(m_area); int minx = scrarea_get_win_x(m_area);
int miny = scrarea_get_win_y(m_area); int miny = scrarea_get_win_y(m_area);
m_area_rect.SetLeft(minx + x1);
m_area_rect.SetBottom(miny + y1);
m_area_rect.SetRight(minx + x2);
m_area_rect.SetTop(miny + y2);
glViewport(minx + x1, miny + y1, vp_width, vp_height); glViewport(minx + x1, miny + y1, vp_width, vp_height);
glScissor(minx + x1, miny + y1, vp_width, vp_height); glScissor(minx + x1, miny + y1, vp_width, vp_height);
} }

@ -117,6 +117,10 @@ public:
return m_displayarea; return m_displayarea;
}; };
RAS_Rect &
GetWindowArea(
);
void void
SetViewPort( SetViewPort(
int x1, int y1, int x1, int y1,
@ -159,6 +163,7 @@ public:
private: private:
/** Blender area the game engine is running within */ /** Blender area the game engine is running within */
struct ScrArea* m_area; struct ScrArea* m_area;
RAS_Rect m_area_rect;
}; };
#endif // __KX_BLENDERCANVAS #endif // __KX_BLENDERCANVAS

@ -131,6 +131,12 @@ public:
return m_displayarea; return m_displayarea;
}; };
RAS_Rect &
GetWindowArea(
) {
return m_displayarea;
}
void void
BeginFrame( BeginFrame(
) {}; ) {};

@ -43,6 +43,7 @@
#include "STR_String.h" #include "STR_String.h"
#include "RAS_ICanvas.h" #include "RAS_ICanvas.h"
#include "RAS_Rect.h"
#include "RAS_2DFilterManager.h" #include "RAS_2DFilterManager.h"
#include <iostream> #include <iostream>
@ -293,10 +294,13 @@ void RAS_2DFilterManager::SetupTextures(bool depth, bool luminance)
} }
} }
void RAS_2DFilterManager::UpdateOffsetMatrix(int width, int height) void RAS_2DFilterManager::UpdateOffsetMatrix(RAS_ICanvas* canvas)
{ {
canvaswidth = texturewidth = width; RAS_Rect canvas_rect = canvas->GetWindowArea();
canvasheight = textureheight = height; canvaswidth = canvas->GetWidth();
canvasheight = canvas->GetHeight();
texturewidth = canvaswidth + canvas_rect.GetLeft();
textureheight = canvasheight + canvas_rect.GetBottom();
GLint i,j; GLint i,j;
i = 0; i = 0;
@ -352,7 +356,7 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
if(canvaswidth != canvas->GetWidth() || canvasheight != canvas->GetHeight()) if(canvaswidth != canvas->GetWidth() || canvasheight != canvas->GetHeight())
{ {
UpdateOffsetMatrix(canvas->GetWidth(), canvas->GetHeight()); UpdateOffsetMatrix(canvas);
SetupTextures(need_depth, need_luminance); SetupTextures(need_depth, need_luminance);
} }
GLuint viewport[4]={0}; GLuint viewport[4]={0};
@ -373,6 +377,8 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
glViewport(0,0, texturewidth, textureheight); glViewport(0,0, texturewidth, textureheight);
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);

@ -42,7 +42,7 @@ private:
void SetupTextures(bool depth, bool luminance); void SetupTextures(bool depth, bool luminance);
void FreeTextures(); void FreeTextures();
void UpdateOffsetMatrix(int width, int height); void UpdateOffsetMatrix(RAS_ICanvas* canvas);
float textureoffsets[18]; float textureoffsets[18];
float view[4]; float view[4];

@ -136,6 +136,14 @@ public:
GetDisplayArea( GetDisplayArea(
) = 0; ) = 0;
/**
* Used to get canvas area within blender.
*/
virtual
RAS_Rect &
GetWindowArea(
) = 0;
/** /**
* Set the visible vieport * Set the visible vieport
*/ */