[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28848] branches/soc-2010-moguri/source/ blender/gpu/intern/gpu_extensions.c: Getting geometry shaders working.

Mitchell Stokes mogurijin at gmail.com
Wed May 19 07:41:30 CEST 2010


Revision: 28848
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28848
Author:   moguri
Date:     2010-05-19 07:41:30 +0200 (Wed, 19 May 2010)

Log Message:
-----------
Getting geometry shaders working. For the time being GL_GEOMETRY_INPUT_TYPE_EXT is set to GL_TRIANGLES and GL_GEOMETRY_OUTPUT_TYPE_EXT is set to GL_TRIANGLE_STRIP. I'll add the ability to change these later.

Modified Paths:
--------------
    branches/soc-2010-moguri/source/blender/gpu/intern/gpu_extensions.c

Modified: branches/soc-2010-moguri/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/soc-2010-moguri/source/blender/gpu/intern/gpu_extensions.c	2010-05-19 05:39:42 UTC (rev 28847)
+++ branches/soc-2010-moguri/source/blender/gpu/intern/gpu_extensions.c	2010-05-19 05:41:30 UTC (rev 28848)
@@ -918,6 +918,7 @@
 GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const char *geomcode, /*GPUShader *lib,*/ const char *libcode)
 {
 	GLint status;
+	GLint temp;
 	GLcharARB log[5000];
 	const char *fragsource[2];
 	GLsizei length = 0;
@@ -935,7 +936,10 @@
 		shader->fragment = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
 	if(geomcode)
 		if(!GL_EXT_geometry_shader4)
+		{
+			shader->geometry = 0;
 			printf("Geometry shaders not supported, ignoring...\n");
+		}
 		else
 			shader->geometry = glCreateShaderObjectARB(GL_GEOMETRY_SHADER_EXT);
 	shader->object = glCreateProgramObjectARB();
@@ -991,6 +995,12 @@
 		glCompileShaderARB(shader->geometry);
 		glGetObjectParameterivARB(shader->geometry, GL_OBJECT_COMPILE_STATUS_ARB, &status);
 
+		glProgramParameteriEXT(shader->object, GL_GEOMETRY_INPUT_TYPE_EXT, GL_TRIANGLES);
+		glProgramParameteriEXT(shader->object, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_TRIANGLE_STRIP);
+
+		glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, &temp);
+		glProgramParameteriEXT(shader->object, GL_GEOMETRY_VERTICES_OUT_EXT, temp);
+	
 		if (!status) {
 			glGetInfoLogARB(shader->geometry, sizeof(log), &length, log);
 			shader_print_errors("compile", log, geomcode);





More information about the Bf-blender-cvs mailing list