Revision: 15737
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15737
Author:   blendix
Date:     2008-07-24 20:00:46 +0200 (Thu, 24 Jul 2008)

Log Message:
-----------
Apricot Branch: GLSL
====================

* Added ObColor support, though it works different than for TexFaces.
  It used a new ObColor option in the materials, which will modulate
  the final color/alpha with the object color and alpha, also works
  in the render engine.
* Made GLSL check the ZTransp flag. A material is now only drawn
  transparent if this flag is enabled, a bit more consistent with the
  render engine.
* Fix for bug #17359: crash related subsurf + editmode GLSL.

Modified Paths:
--------------
    branches/apricot/source/blender/blenkernel/intern/object.c
    branches/apricot/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/apricot/source/blender/gpu/GPU_material.h
    branches/apricot/source/blender/gpu/intern/gpu_codegen.c
    branches/apricot/source/blender/gpu/intern/gpu_draw.c
    branches/apricot/source/blender/gpu/intern/gpu_material.c
    branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl
    branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl.c
    branches/apricot/source/blender/makesdna/DNA_material_types.h
    branches/apricot/source/blender/render/intern/source/shadeoutput.c
    branches/apricot/source/blender/src/buttons_shading.c
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h
    branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.h

Modified: branches/apricot/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/object.c  2008-07-24 
16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/blenkernel/intern/object.c  2008-07-24 
18:00:46 UTC (rev 15737)
@@ -921,7 +921,7 @@
        QuatOne(ob->dquat);
 #endif 
 
-       ob->col[0]= ob->col[1]= ob->col[2]= 0.0;
+       ob->col[0]= ob->col[1]= ob->col[2]= 1.0;
        ob->col[3]= 1.0;
 
        ob->loc[0]= ob->loc[1]= ob->loc[2]= 0.0;

Modified: branches/apricot/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/subsurf_ccg.c     
2008-07-24 16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/blenkernel/intern/subsurf_ccg.c     
2008-07-24 18:00:46 UTC (rev 15737)
@@ -1720,6 +1720,7 @@
                CCGFace *f = ccgdm->faceMap[i].face;
                int S, x, y, drawSmooth;
                int index = 
GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
+               int origIndex = ccgDM_getFaceMapIndex(ccgdm, ss, f);
                
                numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
 
@@ -1738,7 +1739,7 @@
                                DM_vertex_attributes_from_gpu(dm, &gattribs, 
&attribs);
                }
 
-               if(!doDraw || (setDrawOptions && !setDrawOptions(userData, 
index))) {
+               if(!doDraw || (setDrawOptions && !setDrawOptions(userData, 
origIndex))) {
                        a += gridFaces*gridFaces*numVerts;
                        continue;
                }

Modified: branches/apricot/source/blender/gpu/GPU_material.h
===================================================================
--- branches/apricot/source/blender/gpu/GPU_material.h  2008-07-24 16:58:39 UTC 
(rev 15736)
+++ branches/apricot/source/blender/gpu/GPU_material.h  2008-07-24 18:00:46 UTC 
(rev 15737)
@@ -80,7 +80,8 @@
        GPU_INVERSE_VIEW_MATRIX = 4,
        GPU_INVERSE_OBJECT_MATRIX = 8,
        GPU_VIEW_POSITION = 16,
-       GPU_VIEW_NORMAL = 32
+       GPU_VIEW_NORMAL = 32,
+       GPU_OBCOLOR = 64
 } GPUBuiltin;
 
 typedef enum GPUBlendMode {
@@ -114,7 +115,7 @@
 
 void GPU_material_output_link(GPUMaterial *material, GPUNodeLink *link);
 void GPU_material_enable_alpha(GPUMaterial *material);
-GPUBlendMode GPU_material_blend_mode(GPUMaterial *material);
+GPUBlendMode GPU_material_blend_mode(GPUMaterial *material, float obcol[4]);
 
 /* High level functions to create and use GPU materials */
 
@@ -124,7 +125,7 @@
 void GPU_materials_free();
 
 void GPU_material_bind(GPUMaterial *material, int lay);
-void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float 
viewmat[][4], float viewinv[][4]);
+void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float 
viewmat[][4], float viewinv[][4], float obcol[4]);
 void GPU_material_unbind(GPUMaterial *material);
 
 void GPU_material_vertex_attributes(GPUMaterial *material,

Modified: branches/apricot/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_codegen.c    2008-07-24 
16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/gpu/intern/gpu_codegen.c    2008-07-24 
18:00:46 UTC (rev 15737)
@@ -464,6 +464,8 @@
                return "varposition";
        else if(builtin == GPU_VIEW_NORMAL)
                return "varnormal";
+       else if(builtin == GPU_OBCOLOR)
+               return "unfobcolor";
        else
                return "";
 }

Modified: branches/apricot/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_draw.c       2008-07-24 
16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/gpu/intern/gpu_draw.c       2008-07-24 
18:00:46 UTC (rev 15737)
@@ -834,7 +834,7 @@
                if(glsl && ma->gpumaterial) {
                        /* do glsl only if creating it succeed, else fallback */
                        GMS.gmatbuf[a]= ma;
-                       blendmode = GPU_material_blend_mode(ma->gpumaterial);
+                       blendmode = GPU_material_blend_mode(ma->gpumaterial, 
ob->col);
                }
                else {
                        /* fixed function opengl materials */
@@ -891,6 +891,7 @@
 
        /* unbind glsl material */
        if(GMS.gboundmat) {
+               if(GMS.alphapass) glDepthMask(0);
                GPU_material_unbind(GMS.gboundmat->gpumaterial);
                GMS.gboundmat= NULL;
        }
@@ -908,8 +909,10 @@
 
                        GPU_material_vertex_attributes(mat->gpumaterial, 
gattribs);
                        GPU_material_bind(mat->gpumaterial, GMS.gob->lay);
-                       GPU_material_bind_uniforms(mat->gpumaterial, 
GMS.gob->obmat, G.vd->viewmat, G.vd->viewinv);
+                       GPU_material_bind_uniforms(mat->gpumaterial, 
GMS.gob->obmat, G.vd->viewmat, G.vd->viewinv, GMS.gob->col);
                        GMS.gboundmat= mat;
+
+                       if(GMS.alphapass) glDepthMask(1);
                }
                else {
                        /* or do fixed function opengl material */
@@ -945,6 +948,7 @@
        GMS.lastretval= 1;
 
        if(GMS.gboundmat) {
+               if(GMS.alphapass) glDepthMask(0);
                GPU_material_unbind(GMS.gboundmat->gpumaterial);
                GMS.gboundmat= NULL;
        }

Modified: branches/apricot/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_material.c   2008-07-24 
16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/gpu/intern/gpu_material.c   2008-07-24 
18:00:46 UTC (rev 15737)
@@ -78,7 +78,7 @@
        GPUPass *pass;
        GPUVertexAttribs attribs;
        int builtins;
-       int alpha;
+       int alpha, obcolalpha;
 
        LinkNode *lamps;
 };
@@ -221,13 +221,13 @@
        }
 }
 
-void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float 
viewmat[][4], float viewinv[][4])
+void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float 
viewmat[][4], float viewinv[][4], float obcol[4])
 {
        if(material->pass) {
                GPUShader *shader = GPU_pass_shader(material->pass);
                LinkNode *nlink;
                GPULamp *lamp;
-               float invmat[4][4];
+               float invmat[4][4], col[4];
 
                /* handle builtins */
                if(material->builtins & GPU_VIEW_MATRIX) {
@@ -243,6 +243,11 @@
                        Mat4Invert(invmat, obmat);
                        GPU_shader_uniform_vector(shader, 
GPU_builtin_name(GPU_INVERSE_OBJECT_MATRIX), 16, 1, (float*)invmat);
                }
+               if(material->builtins & GPU_OBCOLOR) {
+                       QUATCOPY(col, obcol);
+                       CLAMP(col[3], 0.0f, 1.0f);
+                       GPU_shader_uniform_vector(shader, 
GPU_builtin_name(GPU_OBCOLOR), 4, 1, col);
+               }
 
                /* update lamps */
                for(nlink=material->lamps; nlink; nlink=nlink->next) {
@@ -286,9 +291,9 @@
        material->alpha= 1;
 }
 
-GPUBlendMode GPU_material_blend_mode(GPUMaterial *material)
+GPUBlendMode GPU_material_blend_mode(GPUMaterial *material, float obcol[3])
 {
-       if(material->alpha)
+       if(material->alpha || (material->obcolalpha && obcol[3] < 1.0f))
                return GPU_BLEND_ALPHA;
        else
                return GPU_BLEND_SOLID;
@@ -1014,7 +1019,7 @@
 
        do_material_tex(shi);
 
-       if(ma->alpha < 1.0f)
+       if(ma->mode & MA_ZTRA)
                GPU_material_enable_alpha(mat);
 
        if((G.fileflags & G_FILE_GLSL_NO_LIGHTS) || (ma->mode & MA_SHLESS)) {
@@ -1082,6 +1087,11 @@
        }
 
        GPU_link(mat, "mtex_alpha_to_col", shr->combined, shr->alpha, 
&shr->combined);
+
+       if(ma->shade_flag & MA_OBCOLOR) {
+               mat->obcolalpha = 1;
+               GPU_link(mat, "shade_obcolor", shr->combined, 
GPU_builtin(GPU_OBCOLOR), &shr->combined);
+       }
 }
 
 GPUNodeLink *GPU_blender_material(GPUMaterial *mat, Material *ma)

Modified: branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl 
2008-07-24 16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl 
2008-07-24 18:00:46 UTC (rev 15737)
@@ -1473,6 +1473,11 @@
        outcol = col*fac;
 }
 
+void shade_obcolor(vec4 col, vec4 obcol, out vec4 outcol)
+{
+       outcol = col*obcol;
+}
+
 void ramp_rgbtobw(vec3 color, out float outval)
 {
        outval = color.r*0.3 + color.g*0.58 + color.b*0.12;

Modified: branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl.c
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl.c       
2008-07-24 16:58:39 UTC (rev 15736)
+++ branches/apricot/source/blender/gpu/intern/gpu_shader_material.glsl.c       
2008-07-24 18:00:46 UTC (rev 15737)
@@ -1,976 +1,978 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 32168;
+int datatoc_gpu_shader_material_glsl_size= 32252;
 char datatoc_gpu_shader_material_glsl[]= {
- 10,102,108,111, 97,116, 32,101,
-120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 
10,123, 10,  9,114,101,116,117,114,110, 32,112,111,
-119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 
59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,
- 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 
32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,
-108, 41, 10,123, 10,  9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 
99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44,
- 32, 99,100,101,108,116, 97, 59, 10,  9,118,101, 99, 51, 32, 99, 59, 10, 10,  
9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,
-103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 
32,114,103, 98, 91, 50, 93, 41, 41, 59, 10,  9, 99,109,
-105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 
32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98,
- 91, 50, 93, 41, 41, 59, 10,  9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 
97,120, 45, 99,109,105,110, 59, 10, 10,  9,118, 32,
- 61, 32, 99,109, 97,120, 59, 10,  9,105,102, 32, 40, 99,109, 97,120, 33, 61, 
48, 46, 48, 41, 10,  9,  9,115, 32, 61, 32, 99,100,
-101,108,116, 97, 47, 99,109, 97,120, 59, 10,  9,101,108,115,101, 32,123, 10,  
9,  9,115, 32, 61, 32, 48, 46, 48, 59, 10,  9,  9,
-104, 32, 61, 32, 48, 46, 48, 59, 10,  9,125, 10, 10,  9,105,102, 32, 40,115, 
32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10,  9,  9,
-104, 32, 61, 32, 48, 46, 48, 59, 10,  9,125, 10,  9,101,108,115,101, 32,123, 
10,  9,  9, 99, 32, 61, 32, 40,118,101, 99, 51, 40,
- 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 
32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,
-108,116, 97, 59, 10, 10,  9,  9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 
99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50,
- 93, 32, 45, 32, 99, 91, 49, 93, 59, 10,  9,  9,101,108,115,101, 32,105,102, 
32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120,
- 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 
32, 99, 91, 50, 93, 59, 10,  9,  9,101,108,115,101,

@@ 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