[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