[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55251] trunk/blender/source/blender/gpu: Fix #34492: clipping border not working with GLSL/ matcap and Nouveau drivers.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Mar 13 19:00:14 CET 2013


Revision: 55251
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55251
Author:   blendix
Date:     2013-03-13 18:00:13 +0000 (Wed, 13 Mar 2013)
Log Message:
-----------
Fix #34492: clipping border not working with GLSL/matcap and Nouveau drivers.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/intern/gpu_extensions.c
    trunk/blender/source/blender/gpu/shaders/gpu_shader_simple_vert.glsl
    trunk/blender/source/blender/gpu/shaders/gpu_shader_vertex.glsl

Modified: trunk/blender/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2013-03-13 17:31:26 UTC (rev 55250)
+++ trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2013-03-13 18:00:13 UTC (rev 55251)
@@ -1128,6 +1128,19 @@
 	fprintf(stderr, "%s\n", log);
 }
 
+static const char *gpu_shader_standard_defines()
+{
+	/* some useful defines to detect GPU type */
+	if(GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY))
+		return "#define GPU_ATI\n";
+	else if(GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY))
+		return "#define GPU_NVIDIA\n";
+	else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY))
+		return "#define GPU_INTEL\n";
+	
+	return "";
+}
+
 GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const char *libcode, const char *defines)
 {
 	GLint status;
@@ -1156,9 +1169,11 @@
 	}
 
 	if (vertexcode) {
-		const char *source[2];
+		const char *source[3];
 		int num_source = 0;
 
+		source[num_source++] = gpu_shader_standard_defines();
+
 		if (defines) source[num_source++] = defines;
 		if (vertexcode) source[num_source++] = vertexcode;
 
@@ -1178,9 +1193,11 @@
 	}
 
 	if (fragcode) {
-		const char *source[3];
+		const char *source[4];
 		int num_source = 0;
 
+		source[num_source++] = gpu_shader_standard_defines();
+
 		if (defines) source[num_source++] = defines;
 		if (libcode) source[num_source++] = libcode;
 		if (fragcode) source[num_source++] = fragcode;

Modified: trunk/blender/source/blender/gpu/shaders/gpu_shader_simple_vert.glsl
===================================================================
--- trunk/blender/source/blender/gpu/shaders/gpu_shader_simple_vert.glsl	2013-03-13 17:31:26 UTC (rev 55250)
+++ trunk/blender/source/blender/gpu/shaders/gpu_shader_simple_vert.glsl	2013-03-13 18:00:13 UTC (rev 55251)
@@ -29,11 +29,9 @@
 
 	gl_Position = gl_ProjectionMatrix * co;
 
-#ifdef __GLSL_CG_DATA_TYPES 
-	// Setting gl_ClipVertex is necessary to get glClipPlane working on NVIDIA graphic cards.
-	// gl_ClipVertex works only on NVIDIA graphic cards so we have to check with 
-	// __GLSL_CG_DATA_TYPES if a NVIDIA graphic card is used (Cg support).
-	// gl_ClipVerte is supported up to GLSL 1.20.
+#ifdef GPU_NVIDIA 
+	// Setting gl_ClipVertex is necessary to get glClipPlane working on NVIDIA
+	// graphic cards, while on ATI it can cause a software fallback.
 	gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex; 
 #endif 
 

Modified: trunk/blender/source/blender/gpu/shaders/gpu_shader_vertex.glsl
===================================================================
--- trunk/blender/source/blender/gpu/shaders/gpu_shader_vertex.glsl	2013-03-13 17:31:26 UTC (rev 55250)
+++ trunk/blender/source/blender/gpu/shaders/gpu_shader_vertex.glsl	2013-03-13 18:00:13 UTC (rev 55251)
@@ -10,11 +10,9 @@
 	varnormal = normalize(gl_NormalMatrix * gl_Normal);
 	gl_Position = gl_ProjectionMatrix * co;
 
-	// Setting gl_ClipVertex is necessary to get glClipPlane working on NVIDIA graphic cards.
-	// gl_ClipVertex works only on NVIDIA graphic cards so we have to check with 
-	// __GLSL_CG_DATA_TYPES if a NVIDIA graphic card is used (Cg support).
-	// gl_ClipVerte is supported up to GLSL 1.20.
-#ifdef __GLSL_CG_DATA_TYPES 
+#ifdef GPU_NVIDIA
+	// Setting gl_ClipVertex is necessary to get glClipPlane working on NVIDIA
+	// graphic cards, while on ATI it can cause a software fallback.
 	gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex; 
 #endif 
 




More information about the Bf-blender-cvs mailing list