Revision: 58973
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58973
Author:   jwilkins
Date:     2013-08-06 20:31:20 +0000 (Tue, 06 Aug 2013)
Log Message:
-----------
Tested the fixed function fallback mode for the basic shader.

Also tested what happens if there is no glsl support (need to make this a debug 
option)
Fixed memory leak that is detected when no glsl support (in the quad emulation 
code)

Modified Paths:
--------------
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_basic_shader.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_common.c
    
branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_extension_wrapper.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_extensions.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_font_shader.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_immediate.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_immediate_gl.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_immediate_gl.h
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_matrix.c

Modified: 
branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_basic_shader.c
===================================================================
--- branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_basic_shader.c  
2013-08-06 19:50:25 UTC (rev 58972)
+++ branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_basic_shader.c  
2013-08-06 20:31:20 UTC (rev 58973)
@@ -234,69 +234,76 @@
 
 void GPU_basic_shader_bind(void)
 {
-       if (GPU_glsl_support())
+       bool glsl_support = GPU_glsl_support();
+
+       GPU_CHECK_NO_ERROR();
+
+       if (glsl_support) {
                basic_shader_bind();
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
-       /* Only change state if it is different than the Blender default */
+       if (!glsl_support) {
+               if (BASIC_SHADER.options & GPU_BASIC_LIGHTING)
+                       glEnable(GL_LIGHTING);
+               else
+                       glDisable(GL_LIGHTING);
 
-       if (BASIC_SHADER.options & GPU_BASIC_LIGHTING)
-               glEnable(GL_LIGHTING);
+               if (BASIC_SHADER.options & GPU_BASIC_TEXTURE_2D)
+                       glEnable(GL_TEXTURE_2D);
+               else
+                       glDisable(GL_TEXTURE_2D);
 
-       if (BASIC_SHADER.options & GPU_BASIC_TEXTURE_2D)
-               glEnable(GL_TEXTURE_2D);
+               if (BASIC_SHADER.options & GPU_BASIC_TWO_SIDE)
+                       glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+               else
+                       glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
 
-       if (BASIC_SHADER.options & GPU_BASIC_TWO_SIDE)
-               glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+               if (BASIC_SHADER.options & GPU_BASIC_LOCAL_VIEWER)
+                       glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
+               else
+                       glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
 
-       if (BASIC_SHADER.options & GPU_BASIC_LOCAL_VIEWER)
-               glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
-
-       if (BASIC_SHADER.options & GPU_BASIC_SMOOTH)
-               glShadeModel(GL_SMOOTH);
+               if (BASIC_SHADER.options & GPU_BASIC_SMOOTH)
+                       glShadeModel(GL_SMOOTH);
+               else
+                       glShadeModel(GL_FLAT);
+       }
 #endif
 
        if (BASIC_SHADER.options & GPU_BASIC_LIGHTING) {
-GPU_CHECK_NO_ERROR();
                gpu_commit_light();
-GPU_CHECK_NO_ERROR();
                gpu_commit_material();
-GPU_CHECK_NO_ERROR();
 
                BASIC_SHADER.need_normals = true; // Temporary hack. Should be 
solved outside of this file.
        }
        else {
                BASIC_SHADER.need_normals = false; // Temporary hack. Should be 
solved outside of this file.
        }
+
+       GPU_CHECK_NO_ERROR();
 }
 
 
 
 void GPU_basic_shader_unbind(void)
 {
+       GPU_CHECK_NO_ERROR();
+
        if (GPU_glsl_support())
                GPU_shader_unbind();
 
 #if defined(WITH_GL_PROFILE_COMPAT)
-       /* If GL state was switched from the Blender default then reset it. */
-
-       if (BASIC_SHADER.options & GPU_BASIC_LIGHTING)
-               glDisable(GL_LIGHTING);
-
-       if (BASIC_SHADER.options & GPU_BASIC_TEXTURE_2D)
-               glDisable(GL_TEXTURE_2D);
-
-       if (BASIC_SHADER.options & GPU_BASIC_TWO_SIDED)
-               glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
-
-       if (BASIC_SHADER.options & GPU_BASIC_LOCAL_VIEWER)
-               glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
-
-       if (BASIC_SHADER.options & GPU_BASIC_SMOOTH)
-               glShadeModel(GL_FLAT);
+       glDisable(GL_LIGHTING);
+       glDisable(GL_TEXTURE_2D);
+       glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
+       glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
+       glShadeModel(GL_FLAT);
 #endif
 
        BASIC_SHADER.need_normals = false; // Temporary hack. Should be solved 
outside of this file.
+
+       GPU_CHECK_NO_ERROR();
 }
 
 

Modified: branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_common.c
===================================================================
--- branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_common.c        
2013-08-06 19:50:25 UTC (rev 58972)
+++ branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_common.c        
2013-08-06 20:31:20 UTC (rev 58973)
@@ -184,10 +184,12 @@
 
 void gpu_enable_vertex_array   (void)
 {
-       GLint vertex = current_common != NULL ? current_common->vertex : -1;
+       if (current_common != NULL) {
+               if (current_common->vertex != -1)
+                       gpu_glEnableVertexAttribArray(current_common->vertex);
 
-       if (gpu_glEnableVertexAttribArray != NULL && vertex != -1)
-               gpu_glEnableVertexAttribArray(vertex);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glEnableClientState(GL_VERTEX_ARRAY);
@@ -198,10 +200,12 @@
 
 void gpu_enable_normal_array   (void)
 {
-       GLint normal = current_common != NULL ? current_common->normal : -1;
+       if (current_common != NULL) {
+               if (current_common->normal != -1)
+                       gpu_glEnableVertexAttribArray(current_common->normal);
 
-       if (gpu_glEnableVertexAttribArray != NULL && normal != -1)
-               gpu_glEnableVertexAttribArray(normal);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glEnableClientState(GL_NORMAL_ARRAY);
@@ -212,10 +216,12 @@
 
 void gpu_enable_color_array    (void)
 {
-       GLint color = current_common != NULL ? current_common->color : -1;
+       if (current_common != NULL) {
+               if (current_common->color != -1)
+                       gpu_glEnableVertexAttribArray(current_common->color);
 
-       if (gpu_glEnableVertexAttribArray != NULL && color != -1)
-               gpu_glEnableVertexAttribArray(color);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glEnableClientState(GL_COLOR_ARRAY);
@@ -226,13 +232,18 @@
 
 void gpu_enable_texcoord_array (void)
 {
-       GLint multi_texcoord = current_common != NULL ? 
current_common->multi_texcoord[active_texture_num] : -1;
+       GPU_ASSERT(active_texture_num >= 0);
+       GPU_ASSERT(active_texture_num < GPU_MAX_COMMON_TEXCOORDS);
 
-       if (gpu_glEnableVertexAttribArray != NULL && multi_texcoord != -1)
-               gpu_glEnableVertexAttribArray(multi_texcoord);
+       if (current_common != NULL) {
+               if (current_common->multi_texcoord[active_texture_num] != -1)
+                       
gpu_glEnableVertexAttribArray(current_common->multi_texcoord[active_texture_num]);
 
+               return;
+       }
+
 #if defined(WITH_GL_PROFILE_COMPAT)
-       if (active_texture_num < GPU_max_textures()
+       if (active_texture_num < GPU_max_textures())
                glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 #endif
 }
@@ -241,10 +252,12 @@
 
 void gpu_disable_vertex_array  (void)
 {
-       GLint vertex = current_common != NULL ? current_common->vertex : -1;
+       if (current_common != NULL) {
+               if (current_common->vertex != -1)
+                       gpu_glDisableVertexAttribArray(current_common->vertex);
 
-       if (gpu_glDisableVertexAttribArray != NULL && vertex != -1)
-               gpu_glDisableVertexAttribArray(vertex);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glDisableClientState(GL_VERTEX_ARRAY);
@@ -255,10 +268,12 @@
 
 void gpu_disable_normal_array  (void)
 {
-       GLint normal = current_common != NULL ? current_common->normal : -1;
+       if (current_common != NULL) {
+               if (current_common->normal != -1)
+                       gpu_glDisableVertexAttribArray(current_common->normal);
 
-       if (gpu_glDisableVertexAttribArray != NULL && normal != -1)
-               gpu_glDisableVertexAttribArray(normal);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glDisableClientState(GL_NORMAL_ARRAY);
@@ -269,10 +284,12 @@
 
 void gpu_disable_color_array   (void)
 {
-       GLint color = current_common != NULL ? current_common->color : -1;
+       if (current_common != NULL) {
+               if (current_common->color != -1)
+                       gpu_glDisableVertexAttribArray(current_common->color);
 
-       if (gpu_glDisableVertexAttribArray != NULL && color != -1)
-               gpu_glDisableVertexAttribArray(color);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glDisableClientState(GL_COLOR_ARRAY);
@@ -283,11 +300,16 @@
 
 void gpu_disable_texcoord_array(void)
 {
-       GLint multi_texcoord = current_common != NULL ? 
current_common->multi_texcoord[active_texture_num] : -1;
+       GPU_ASSERT(active_texture_num >= 0);
+       GPU_ASSERT(active_texture_num < GPU_MAX_COMMON_TEXCOORDS);
 
-       if (gpu_glDisableVertexAttribArray != NULL && multi_texcoord != -1)
-               gpu_glDisableVertexAttribArray(multi_texcoord);
+       if (current_common != NULL) {
+               if (current_common->multi_texcoord[active_texture_num] != -1)
+                       
gpu_glDisableVertexAttribArray(current_common->multi_texcoord[active_texture_num]);
 
+               return;
+       }
+
 #if defined(WITH_GL_PROFILE_COMPAT)
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 #endif
@@ -297,10 +319,12 @@
 
 void gpu_vertex_pointer(GLint size, GLenum type, GLsizei stride, const GLvoid* 
pointer)
 {
-       GLint vertex = current_common != NULL ? current_common->vertex : -1;
+       if (current_common != NULL) {
+               if (current_common->vertex != -1)
+                       gpu_glVertexAttribPointer(current_common->vertex, size, 
type, GL_FALSE, stride, pointer);
 
-       if (gpu_glVertexAttribPointer != NULL && vertex != -1)
-               gpu_glVertexAttribPointer(vertex, size, type, GL_FALSE, stride, 
pointer);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glVertexPointer(size, type, stride, pointer);
@@ -311,10 +335,12 @@
 
 void gpu_normal_pointer(GLenum type, GLsizei stride, const GLvoid* pointer)
 {
-       GLint normal = current_common != NULL ? current_common->normal : -1;
+       if (current_common != NULL) {
+               if (current_common->normal != -1)
+                       gpu_glVertexAttribPointer(current_common->normal, 3, 
type, GL_FALSE, stride, pointer);
 
-       if (gpu_glVertexAttribPointer != NULL && normal != -1)
-               gpu_glVertexAttribPointer(normal, 3, type, GL_FALSE, stride, 
pointer);
+               return;
+       }
 
 #if defined(WITH_GL_PROFILE_COMPAT)
        glNormalPointer(type, stride, pointer);
@@ -322,14 +348,18 @@
 }
 
 
-// XXX jwilkins: either remove the type parameter or add a normalize parameter 
(this applies to all of the pointer functions, not just gpu_color_pointer)
+
 void gpu_color_pointer(GLint size, GLenum type, GLsizei stride, const GLvoid* 
pointer)
 {
-       GLint color = current_common != NULL ? current_common->color : -1;
+       GPU_ASSERT(type == GL_UNSIGNED_BYTE); // making assumptions about the 
type being a fixed point type
 
-       if (gpu_glVertexAttribPointer != NULL && color != -1)
-               gpu_glVertexAttribPointer(color, size, type, GL_TRUE, stride, 
pointer);
+       if (current_common != NULL) {
+               if (current_common->color != -1)
+                       gpu_glVertexAttribPointer(current_common->color, size, 
type, GL_TRUE, stride, pointer);
 
+               return;
+       }
+
 #if defined(WITH_GL_PROFILE_COMPAT)
        glColorPointer(size, type, stride, pointer);
 #endif
@@ -339,13 +369,18 @@
 
 void gpu_texcoord_pointer(GLint size, GLenum type, GLsizei stride, const 
GLvoid* pointer)
 {
-       GLuint multi_texcoord = current_common != NULL ? 
current_common->multi_texcoord[active_texture_num] : -1;
+       GPU_ASSERT(active_texture_num >= 0);
+       GPU_ASSERT(active_texture_num < GPU_MAX_COMMON_TEXCOORDS);
 
-       if (gpu_glVertexAttribPointer != NULL && multi_texcoord != -1)
-               gpu_glVertexAttribPointer(multi_texcoord, size, type, GL_FALSE, 
stride, pointer);
+       if (current_common != NULL) {
+               if (current_common->multi_texcoord[active_texture_num] != -1)

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to