[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54114] branches/ge_harmony/source: Allowing multiple shader types to be combined for light and prepass shaders , and supplying the fragment libcode to prepass and light fragment shaders.

Daniel Stokes kupomail at gmail.com
Sun Jan 27 00:52:41 CET 2013


Revision: 54114
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54114
Author:   kupoman
Date:     2013-01-26 23:52:41 +0000 (Sat, 26 Jan 2013)
Log Message:
-----------
Allowing multiple shader types to be combined for light and prepass shaders, and supplying the fragment libcode to prepass and light fragment shaders. With these changes it is possible to run the builtin prepass and light shaders as custom shaders (though there is still a bit of a mess with uniforms and the UI).

Modified Paths:
--------------
    branches/ge_harmony/source/blender/gpu/GPU_extensions.h
    branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Modified: branches/ge_harmony/source/blender/gpu/GPU_extensions.h
===================================================================
--- branches/ge_harmony/source/blender/gpu/GPU_extensions.h	2013-01-26 23:49:13 UTC (rev 54113)
+++ branches/ge_harmony/source/blender/gpu/GPU_extensions.h	2013-01-26 23:52:41 UTC (rev 54114)
@@ -232,6 +232,7 @@
 
 GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader);
 void GPU_shader_free_builtin_shaders(void);
+extern const char* GPU_get_libcode();
 
 /* Vertex attributes for shaders */
 

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c	2013-01-26 23:49:13 UTC (rev 54113)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c	2013-01-26 23:52:41 UTC (rev 54114)
@@ -1483,3 +1483,7 @@
 	MEM_freeN(pass);
 }
 
+const char* GPU_get_libcode()
+{
+	return glsl_material_library;
+}
\ No newline at end of file

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.h
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.h	2013-01-26 23:49:13 UTC (rev 54113)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.h	2013-01-26 23:52:41 UTC (rev 54114)
@@ -194,5 +194,7 @@
 void gpu_material_add_node(struct GPUMaterial *material, struct GPUNode *node);
 int GPU_link_changed(struct GPUNodeLink *link);
 
+const char *GPU_get_libcode();
+
 #endif
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-01-26 23:49:13 UTC (rev 54113)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-01-26 23:52:41 UTC (rev 54114)
@@ -1381,20 +1381,24 @@
 		*current = base;
 	}
 	else {
-		Shader *shader = shaders[0];
-		GPUShader *gshader = NULL;
-		switch (shader->type) {
-			case SHADER_TYPE_VERTEX:
-				gshader = GPU_shader_create(shader->source, NULL, NULL, NULL, 0, 0);
-				break;
-			case SHADER_TYPE_FRAGMENT:
-				gshader = GPU_shader_create(NULL, shader->source, NULL, NULL, 0, 0);
-				break;
-			case SHADER_TYPE_GEOMETRY:
-				gshader = GPU_shader_create(NULL, NULL, shader->source, NULL, shader->geom_in, shader->geom_out);
-				break;
+		Shader *shader;
+		char *vert=NULL, *frag=NULL, *geom=NULL;
+		int gin=0, gout=0;
+		int i = 0;
+
+		for (; i < count; i++) {
+			shader = shaders[i];
+			if (shader->type == SHADER_TYPE_VERTEX && !vert)
+				vert = shader->source;
+			else if (shader->type == SHADER_TYPE_FRAGMENT && !frag)
+				frag = shader->source;
+			else if (shader->type == SHADER_TYPE_GEOMETRY && !geom) {
+				geom = shader->source;
+				gin = shader->geom_in;
+				gout = shader->geom_out;
+			}
 		}
-		*current = gshader;
+		*current = GPU_shader_create(vert, frag, geom, GPU_get_libcode(), gin, gout);
 	}
 }
 




More information about the Bf-blender-cvs mailing list