[Bf-blender-cvs] [a5f7e43] opensubdiv-modifier: OpenSubdiv: Matcap GLSL shading works fine again

Sergey Sharybin noreply at git.blender.org
Sat Jul 11 20:02:17 CEST 2015


Commit: a5f7e430d23cf128587b7575972e7318c312d074
Author: Sergey Sharybin
Date:   Fri Jul 10 14:35:11 2015 +0200
Branches: opensubdiv-modifier
https://developer.blender.org/rBa5f7e430d23cf128587b7575972e7318c312d074

OpenSubdiv: Matcap GLSL shading works fine again

===================================================================

M	source/blender/gpu/intern/gpu_extensions.c
M	source/blender/gpu/intern/gpu_material.c

===================================================================

diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index 09d7da2..c271fb2 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -61,8 +61,9 @@
 #  include "BLI_winstuff.h"
 #endif
 
-#define MAX_DEFINE_LENGTH 72
-#define MAX_EXT_DEFINE_LENGTH 280
+/* TODO(sergey): Find better default values for this constants. */
+#define MAX_DEFINE_LENGTH 1024
+#define MAX_EXT_DEFINE_LENGTH 1024
 
 /* Extensions support */
 
@@ -1545,7 +1546,6 @@ static void gpu_shader_standard_extensions(char defines[MAX_EXT_DEFINE_LENGTH])
 {
 #ifdef WITH_OPENSUBDIV
 	strcat(defines, "#extension GL_ARB_texture_query_lod: enable\n"
-	                "#extension GL_EXT_geometry_shader4 : enable\n"
 	                "#extension GL_ARB_gpu_shader5 : enable\n"
 	                "#extension GL_ARB_explicit_attrib_location : require\n");
 #else
@@ -1556,6 +1556,7 @@ static void gpu_shader_standard_extensions(char defines[MAX_EXT_DEFINE_LENGTH])
 
 	if (GPU_geometry_shader_support())
 		strcat(defines, "#extension GL_EXT_geometry_shader4: enable\n");
+
 	if (GPU_instanced_drawing_support()) {
 		strcat(defines, "#extension GL_EXT_gpu_shader4: enable\n");
 		strcat(defines, "#extension GL_ARB_draw_instanced: enable\n");
@@ -1683,8 +1684,6 @@ GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const
 
 	if (vertexcode)
 		shader->vertex = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
-	if (geocode)
-		shader->geometry = glCreateShaderObjectARB(GL_GEOMETRY_SHADER_ARB);
 	if (fragcode)
 		shader->fragment = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
 	if (geocode)
@@ -1732,35 +1731,6 @@ GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const
 		}
 	}
 
-	if (geocode) {
-		const char *source[5];
-		/* custom limit, may be too small, beware */
-		int num_source = 0;
-
-		source[num_source++] = gpu_shader_version();
-		source[num_source++] = standard_extensions;
-		source[num_source++] = standard_defines;
-
-		if (defines) source[num_source++] = defines;
-		source[num_source++] = geocode;
-
-		glAttachObjectARB(shader->object, shader->geometry);
-		glShaderSourceARB(shader->geometry, num_source, source, NULL);
-
-		glCompileShaderARB(shader->geometry);
-		glGetObjectParameterivARB(shader->geometry,
-		                          GL_OBJECT_COMPILE_STATUS_ARB,
-		                          &status);
-
-		if (!status) {
-			glGetInfoLogARB(shader->geometry, sizeof(log), &length, log);
-			shader_print_errors("compile", log, source, num_source);
-
-			GPU_shader_free(shader);
-			return NULL;
-		}
-	}
-
 	if (fragcode) {
 		const char *source[7];
 		int num_source = 0;
@@ -1824,7 +1794,9 @@ GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const
 			return NULL;
 		}
 		
-		GPU_shader_geometry_stage_primitive_io(shader, input, output, number);
+		if (!use_opensubdiv) {
+			GPU_shader_geometry_stage_primitive_io(shader, input, output, number);
+		}
 	}
 
 
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index bc37424..1627c87 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -2416,8 +2416,8 @@ void GPU_material_update_fvar_offset(GPUMaterial *gpu_material,
                                      DerivedMesh *dm)
 {
 	GPUPass *pass = gpu_material->pass;
-	GPUShader *shader = pass->shader;
-	ListBase *inputs = &pass->inputs;
+	GPUShader *shader = (pass != NULL ? pass->shader : NULL);
+	ListBase *inputs = (pass != NULL ? &pass->inputs : NULL);
 	GPUInput *input;
 
 	if (shader == NULL) {




More information about the Bf-blender-cvs mailing list