[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49904] branches/ge_harmony: Adding a prepass to get some normal and fragment position data to the light shader .

Daniel Stokes kupomail at gmail.com
Tue Aug 14 22:49:45 CEST 2012


Revision: 49904
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49904
Author:   kupoman
Date:     2012-08-14 20:49:45 +0000 (Tue, 14 Aug 2012)
Log Message:
-----------
Adding a prepass to get some normal and fragment position data to the light shader. Starting to see shading in the light map now :)

Also fixing the shaders to work with the datatoc changes.

Modified Paths:
--------------
    branches/ge_harmony/SConstruct
    branches/ge_harmony/source/blender/gpu/CMakeLists.txt
    branches/ge_harmony/source/blender/gpu/GPU_extensions.h
    branches/ge_harmony/source/blender/gpu/SConscript
    branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
    branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Added Paths:
-----------
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl

Removed Paths:
-------------
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c

Modified: branches/ge_harmony/SConstruct
===================================================================
--- branches/ge_harmony/SConstruct	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/SConstruct	2012-08-14 20:49:45 UTC (rev 49904)
@@ -502,6 +502,7 @@
 data_to_c_simple("release/datafiles/preview.blend")
 
 # --- glsl ---
+data_to_c_simple("source/blender/gpu/shaders/gpu_shader_light_frag.glsl")
 data_to_c_simple("source/blender/gpu/shaders/gpu_shader_material.glsl")
 data_to_c_simple("source/blender/gpu/shaders/gpu_shader_vertex.glsl")
 data_to_c_simple("source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl")

Modified: branches/ge_harmony/source/blender/gpu/CMakeLists.txt
===================================================================
--- branches/ge_harmony/source/blender/gpu/CMakeLists.txt	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/CMakeLists.txt	2012-08-14 20:49:45 UTC (rev 49904)
@@ -50,7 +50,6 @@
 	intern/gpu_draw.c
 	intern/gpu_extensions.c
 	intern/gpu_material.c
-    shaders/gpu_shader_light_frag.glsl.c
 
 	GPU_buffers.h
 	GPU_draw.h
@@ -59,7 +58,10 @@
 	intern/gpu_codegen.h
 )
 
+data_to_c_simple(shaders/gpu_shader_light_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_material.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_prepass_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_prepass_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_vertex.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_sep_gaussian_blur_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_sep_gaussian_blur_vert.glsl SRC)

Modified: branches/ge_harmony/source/blender/gpu/GPU_extensions.h
===================================================================
--- branches/ge_harmony/source/blender/gpu/GPU_extensions.h	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/GPU_extensions.h	2012-08-14 20:49:45 UTC (rev 49904)
@@ -224,6 +224,7 @@
 	GPU_SHADER_VSM_STORE,
 	GPU_SHADER_SEP_GAUSSIAN_BLUR,
 	GPU_SHADER_LIGHT,
+	GPU_SHADER_PREPASS,
 } GPUBuiltinShader;
 
 GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader);

Modified: branches/ge_harmony/source/blender/gpu/SConscript
===================================================================
--- branches/ge_harmony/source/blender/gpu/SConscript	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/SConscript	2012-08-14 20:49:45 UTC (rev 49904)
@@ -23,6 +23,7 @@
 # generated data files
 import os
 sources.extend((
+    os.path.join(env['DATA_SOURCES'], "gpu_shader_light_frag.glsl.c"),
 	os.path.join(env['DATA_SOURCES'], "gpu_shader_material.glsl.c"),
 	os.path.join(env['DATA_SOURCES'], "gpu_shader_vertex.glsl.c"),
 	os.path.join(env['DATA_SOURCES'], "gpu_shader_sep_gaussian_blur_frag.glsl.c"),

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2012-08-14 20:49:45 UTC (rev 49904)
@@ -74,11 +74,14 @@
 extern char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[];
 extern char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[];
 extern char datatoc_gpu_shader_light_frag_glsl[];
+extern char datatoc_gpu_shader_prepass_frag_glsl[];
+extern char datatoc_gpu_shader_prepass_vert_glsl[];
 
 typedef struct GPUShaders {
 	GPUShader *vsm_store;
 	GPUShader *sep_gaussian_blur;
 	GPUShader *light;
+	GPUShader *prepass;
 } GPUShaders;
 
 static struct GPUGlobal {
@@ -1378,6 +1381,11 @@
 				GG.shaders.light = GPU_shader_create(NULL, datatoc_gpu_shader_light_frag_glsl, NULL, NULL, 0, 0);
 			retval = GG.shaders.light;
 			break;
+		case GPU_SHADER_PREPASS:
+			if (!GG.shaders.prepass)
+				GG.shaders.prepass = GPU_shader_create(datatoc_gpu_shader_prepass_vert_glsl, datatoc_gpu_shader_prepass_frag_glsl, NULL, NULL, 0, 0);
+			retval = GG.shaders.prepass;
+			break;
 	}
 
 	if (retval == NULL)

Modified: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2012-08-14 20:49:45 UTC (rev 49904)
@@ -1,13 +1,25 @@
 struct Light {
-    float energy;
-    vec3 color;
-    vec3 position;
+	float energy;
+	vec3 color;
+	vec3 position;
 };
 
 uniform Light light;
 
+uniform sampler2D prepass1;
+uniform sampler2D prepass2;
+
 void main()
 {
-    gl_FragData[0] = vec4(light.color, light.energy);
+	vec3 N = texture2D(prepass1, gl_TexCoord[0].st).rgb;
+	vec3 V = texture2D(prepass2, gl_TexCoord[0].st).rgb;
+	vec3 L = light.position - V;
+	L = normalize(L);
+	
+	float lambert = max(dot(N, L), 0.0);
+	
+	vec3 diff = light.color * light.energy * lambert;
+
+	gl_FragData[0] = vec4(diff, 1);
 }
 

Deleted: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c	2012-08-14 20:49:45 UTC (rev 49904)
@@ -1,12 +0,0 @@
-/* DataToC output of file <gpu_shader_light_frag_glsl> */
-
-int datatoc_gpu_shader_light_frag_glsl_size = 178;
-char datatoc_gpu_shader_light_frag_glsl[] = {
-115,116,114,117, 99,116, 32, 76,105,103,104,116, 32,123, 13, 10, 32, 32,
- 32, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, 59, 13, 10, 32, 32, 32, 32,118,101, 99, 51, 32, 99,111,108,111,114, 59,
- 13, 10, 32, 32, 32, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 59, 13, 10,125, 59, 13, 10, 13, 10,117,110,105,102,
-111,114,109, 32, 76,105,103,104,116, 32,108,105,103,104,116, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13,
- 10,123, 13, 10, 32, 32, 32, 32,103,108, 95, 70,114, 97,103, 68, 97,116, 97, 91, 48, 93, 32, 61, 32,118,101, 99, 52, 40,108,105,
-103,104,116, 46, 99,111,108,111,114, 44, 32,108,105,103,104,116, 46,101,110,101,114,103,121, 41, 59, 13, 10,125, 13, 10, 13, 10,
-  0};
-

Added: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl	                        (rev 0)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl	2012-08-14 20:49:45 UTC (rev 49904)
@@ -0,0 +1,9 @@
+
+varying vec3 varnormal;
+varying vec3 varposition;
+
+void main()
+{
+    gl_FragData[0].rgb = varnormal;
+    gl_FragData[1].rgb = varposition;
+}
\ No newline at end of file

Added: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl	                        (rev 0)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl	2012-08-14 20:49:45 UTC (rev 49904)
@@ -0,0 +1,13 @@
+
+varying vec3 varposition;
+varying vec3 varnormal;
+
+void main()
+{
+	vec4 co = gl_ModelViewMatrix * gl_Vertex;
+
+	varposition = co.xyz;
+	varnormal = normalize(gl_NormalMatrix * gl_Normal);
+	gl_Position = gl_ProjectionMatrix * co;
+}
+

Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2012-08-14 20:49:45 UTC (rev 49904)
@@ -872,6 +872,14 @@
 		// this is now done incrementatlly in KX_Scene::CalculateVisibleMeshes
 		//scene->UpdateMeshTransformations();
 
+		// prepass
+		m_rasterizer->BeginPrePass();
+		RenderFrame(scene, cam);
+		m_rasterizer->EndPrePass();
+
+		// shadow buffers
+		RenderShadowBuffers(scene);
+
 		// light pass
 		m_rasterizer->BeginLightPass();
 		CListValue *lightlist = scene->GetLightList();
@@ -879,9 +887,6 @@
 			m_rasterizer->RenderLight(((KX_LightObject*)lightlist->GetValue(i))->GetLightData());
 		m_rasterizer->EndLightPass();
 
-		// shadow buffers
-		RenderShadowBuffers(scene);
-
 		// Avoid drawing the scene with the active camera twice when it's viewport is enabled
 		if (cam && !cam->GetViewport())
 		{

Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp	2012-08-14 20:49:45 UTC (rev 49904)
@@ -208,7 +208,7 @@
 			for (int j=0; j<4; j++, dobmat++)
 				obmat[i][j] = (float)*dobmat;
 
-		memcpy(m_lightobj.m_position, &obmat[0][3], sizeof(float)*3);
+		memcpy(m_lightobj.m_position, &obmat[3], sizeof(float)*4);
 
 		GPU_lamp_update(lamp, m_lightobj.m_layer, 0, obmat);
 		GPU_lamp_update_colors(lamp, m_lightobj.m_red, m_lightobj.m_green, 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-08-14 20:49:45 UTC (rev 49904)
@@ -77,7 +77,8 @@
 			KX_SOLID,
 			KX_SHADED,
 			KX_TEXTURED,
-			KX_SHADOW
+			KX_SHADOW,
+			KX_OVERRIDE
 	};
 
 	/**
@@ -457,6 +458,9 @@
 	virtual void	RenderLight(RAS_LightObject *light)=0;
 	virtual void	EndLightPass()=0;
 
+	virtual void	BeginPrePass()=0;
+	virtual void	EndPrePass()=0;
+
 #ifdef WITH_CXX_GUARDEDALLOC
 	MEM_CXX_CLASS_ALLOC_FUNCS("GE:RAS_IRasterizer")
 #endif

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h	2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h	2012-08-14 20:49:45 UTC (rev 49904)
@@ -63,7 +63,7 @@
 	bool	m_nodiffuse;
 	bool	m_nospecular;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list