forked from bartvdbraak/blender
BGE Bug Fix:#17349, fixes some problems about 2d-filters
This commit is contained in:
parent
9f53999181
commit
5350d5eb2c
@ -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
|
||||||
|
@ -130,6 +130,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};
|
||||||
@ -360,19 +364,21 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
|
|||||||
if(need_depth){
|
if(need_depth){
|
||||||
glActiveTextureARB(GL_TEXTURE1);
|
glActiveTextureARB(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_2D, texname[1]);
|
glBindTexture(GL_TEXTURE_2D, texname[1]);
|
||||||
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT, 0,0, texturewidth,textureheight, 0);
|
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT, 0, 0, texturewidth,textureheight, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(need_luminance){
|
if(need_luminance){
|
||||||
glActiveTextureARB(GL_TEXTURE2);
|
glActiveTextureARB(GL_TEXTURE2);
|
||||||
glBindTexture(GL_TEXTURE_2D, texname[2]);
|
glBindTexture(GL_TEXTURE_2D, texname[2]);
|
||||||
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE16, 0,0, texturewidth,textureheight, 0);
|
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE16, 0, 0 , texturewidth,textureheight, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
|
glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
|
||||||
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
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user