[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53318] trunk/blender/source/gameengine: BGE: Fixing an assert with the canvas' GetViewPort().
Mitchell Stokes
mogurijin at gmail.com
Tue Dec 25 07:20:58 CET 2012
Revision: 53318
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53318
Author: moguri
Date: 2012-12-25 06:20:50 +0000 (Tue, 25 Dec 2012)
Log Message:
-----------
BGE: Fixing an assert with the canvas' GetViewPort(). bf_gpu was changing the viewport when handling shadow buffers. KX_LightObject::BindShadowBuffer() now updates the canvas with the new viewport information from bf_gpu.
Modified Paths:
--------------
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h
trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.cpp
trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.h
trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
trunk/blender/source/gameengine/Ketsji/KX_Light.h
trunk/blender/source/gameengine/Rasterizer/RAS_ICanvas.h
Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp 2012-12-25 06:20:50 UTC (rev 53318)
@@ -178,6 +178,18 @@
glScissor(minx + x1, miny + y1, vp_width, vp_height);
}
+ void
+KX_BlenderCanvas::
+UpdateViewPort(
+ int x1, int y1,
+ int x2, int y2
+) {
+ m_viewport[0] = x1;
+ m_viewport[1] = y1;
+ m_viewport[2] = x2;
+ m_viewport[3] = y2;
+}
+
const int*
KX_BlenderCanvas::
GetViewPort() {
Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h 2012-12-25 06:20:50 UTC (rev 53318)
@@ -151,6 +151,13 @@
int x1, int y1,
int x2, int y2
);
+
+ void
+ UpdateViewPort(
+ int x1, int y1,
+ int x2, int y2
+ );
+
const int*
GetViewPort();
Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.cpp 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.cpp 2012-12-25 06:20:50 UTC (rev 53318)
@@ -131,8 +131,16 @@
glViewport(x1,y1,x2-x1 + 1,y2-y1 + 1);
glScissor(x1,y1,x2-x1 + 1,y2-y1 + 1);
-};
+}
+void GPC_Canvas::UpdateViewPort(int x1, int y1, int x2, int y2)
+{
+ m_viewport[0] = x1;
+ m_viewport[1] = y1;
+ m_viewport[2] = x2;
+ m_viewport[3] = y2;
+}
+
const int *GPC_Canvas::GetViewPort()
{
#ifdef DEBUG
Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.h
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.h 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_Canvas.h 2012-12-25 06:20:50 UTC (rev 53318)
@@ -155,6 +155,7 @@
);
void SetViewPort(int x1, int y1, int x2, int y2);
+ void UpdateViewPort(int x1, int y1, int x2, int y2);
const int *GetViewPort();
void ClearColor(float r, float g, float b, float a);
Modified: trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2012-12-25 06:20:50 UTC (rev 53318)
@@ -1167,7 +1167,7 @@
m_rasterizer->SetDrawingMode(RAS_IRasterizer::KX_SHADOW);
/* binds framebuffer object, sets up camera .. */
- light->BindShadowBuffer(m_rasterizer, cam, camtrans);
+ light->BindShadowBuffer(m_rasterizer, m_canvas, cam, camtrans);
/* update scene */
scene->CalculateVisibleMeshes(m_rasterizer, cam, light->GetShadowLayer());
Modified: trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Light.cpp 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/Ketsji/KX_Light.cpp 2012-12-25 06:20:50 UTC (rev 53318)
@@ -236,7 +236,7 @@
return 0;
}
-void KX_LightObject::BindShadowBuffer(RAS_IRasterizer *ras, KX_Camera *cam, MT_Transform& camtrans)
+void KX_LightObject::BindShadowBuffer(RAS_IRasterizer *ras, RAS_ICanvas *canvas, KX_Camera *cam, MT_Transform& camtrans)
{
GPULamp *lamp;
float viewmat[4][4], winmat[4][4];
@@ -246,6 +246,9 @@
lamp = GetGPULamp();
GPU_lamp_shadow_buffer_bind(lamp, viewmat, &winsize, winmat);
+ /* GPU_lamp_shadow_buffer_bind() changes the viewport, so update the canvas */
+ canvas->UpdateViewPort(0, 0, winsize, winsize);
+
/* setup camera transformation */
MT_Matrix4x4 modelviewmat((float*)viewmat);
MT_Matrix4x4 projectionmat((float*)winmat);
Modified: trunk/blender/source/gameengine/Ketsji/KX_Light.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Light.h 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/Ketsji/KX_Light.h 2012-12-25 06:20:50 UTC (rev 53318)
@@ -64,7 +64,7 @@
struct GPULamp *GetGPULamp();
bool HasShadowBuffer();
int GetShadowLayer();
- void BindShadowBuffer(class RAS_IRasterizer *ras, class KX_Camera *cam, class MT_Transform& camtrans);
+ void BindShadowBuffer(class RAS_IRasterizer *ras, class RAS_ICanvas *canvas, class KX_Camera *cam, class MT_Transform& camtrans);
void UnbindShadowBuffer(class RAS_IRasterizer *ras);
struct Image *GetTextureImage(short texslot);
void Update();
Modified: trunk/blender/source/gameengine/Rasterizer/RAS_ICanvas.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_ICanvas.h 2012-12-24 17:55:50 UTC (rev 53317)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_ICanvas.h 2012-12-25 06:20:50 UTC (rev 53318)
@@ -178,9 +178,21 @@
SetViewPort(
int x1, int y1,
int x2, int y2
- ) = 0;
+ ) = 0;
/**
+ * Update the Canvas' viewport (used when the viewport changes without using SetViewPort()
+ * eg: Shadow buffers and FBOs
+ */
+
+ virtual
+ void
+ UpdateViewPort(
+ int x1, int y1,
+ int x2, int y2
+ ) = 0;
+
+ /**
* Get the visible viewport
*/
virtual
More information about the Bf-blender-cvs
mailing list