[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