Revision: 53307
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53307
Author:   kupoman
Date:     2012-12-24 03:27:05 +0000 (Mon, 24 Dec 2012)
Log Message:
-----------
Adding support for mat2, mat3, and mat4 uniforms to custom shaders. 
Unfortunately the Blender UI displays them a little oddly.

Modified Paths:
--------------
    branches/ge_harmony/CMakeLists.txt
    branches/ge_harmony/source/blender/blenkernel/intern/shader.c
    branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h
    branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c

Modified: branches/ge_harmony/CMakeLists.txt
===================================================================
--- branches/ge_harmony/CMakeLists.txt  2012-12-24 03:13:53 UTC (rev 53306)
+++ branches/ge_harmony/CMakeLists.txt  2012-12-24 03:27:05 UTC (rev 53307)
@@ -1086,11 +1086,7 @@
 
                if(WITH_PYTHON)
                        # normally cached but not since we include them with 
blender
-                       if(MSVC10)
-                               set(PYTHON_VERSION 3.2) # CACHE STRING)
-                       else()
-                               set(PYTHON_VERSION 3.3) # CACHE STRING)
-                       endif()
+                       set(PYTHON_VERSION 3.3) # CACHE STRING)
 
                        set_lib_path(PYTHON "python")
                        STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS 
${PYTHON_VERSION})

Modified: branches/ge_harmony/source/blender/blenkernel/intern/shader.c
===================================================================
--- branches/ge_harmony/source/blender/blenkernel/intern/shader.c       
2012-12-24 03:13:53 UTC (rev 53306)
+++ branches/ge_harmony/source/blender/blenkernel/intern/shader.c       
2012-12-24 03:27:05 UTC (rev 53307)
@@ -130,6 +130,13 @@
        else if (strcmp(type, "sampler2D") == 0) {
                uni->type = SHADER_UNF_SAMPLER2D;
        }
+       else if (starts_with(type, "mat")) {
+               uni->type = SHADER_UNF_MAT2;
+               uni->size = atoi(type+3);
+               uni->type += uni->size -2;
+               uni->size *= uni->size;
+               data_size = sizeof(float);
+       }
        else {
                printf("Data type %s is not supported\n", type);
                MEM_freeN(uni);
@@ -138,10 +145,10 @@
 
 
        /* Clamp sizes in case there is an error in the shader */
-       if (uni->size < 1)
-               uni->size = 1;
-       else if (uni->size > 4)
-               uni->size = 4;
+       //if (uni->size < 1)
+       //      uni->size = 1;
+       //else if (uni->size > 4)
+       //      uni->size = 4;
 
        /* Ready data */
        if (uni->size > 1) {            

Modified: branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h      
2012-12-24 03:13:53 UTC (rev 53306)
+++ branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h      
2012-12-24 03:27:05 UTC (rev 53307)
@@ -130,6 +130,9 @@
 #define SHADER_UNF_IVEC3       7
 #define SHADER_UNF_IVEC4       8
 #define SHADER_UNF_SAMPLER2D 10
+#define SHADER_UNF_MAT2                11
+#define SHADER_UNF_MAT3                12
+#define SHADER_UNF_MAT4                13
 
 
 #endif //__DNA_SHADER_TYPES_H__

Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c     
2012-12-24 03:13:53 UTC (rev 53306)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c     
2012-12-24 03:27:05 UTC (rev 53307)
@@ -229,6 +229,12 @@
                return &RNA_IVec4Uniform;
        case SHADER_UNF_SAMPLER2D:
                return &RNA_Sampler2DUniform;
+       case SHADER_UNF_MAT2:
+               return &RNA_Mat2Uniform;
+       case SHADER_UNF_MAT3:
+               return &RNA_Mat3Uniform;
+       case SHADER_UNF_MAT4:
+               return &RNA_Mat4Uniform;
        default:
                return &RNA_Uniform;
        }
@@ -237,17 +243,27 @@
 #endif
 
 /* Helper function for defining the different uniform data types */
-static void rna_def_uniformtype(BlenderRNA *brna, const char *name, const char 
*doc, int type, int size)
+static void rna_def_uniformtype(BlenderRNA *brna, const char *name, const char 
*doc, int type, int subtype, int size)
 {
        PropertyRNA *prop;
        StructRNA *srna;
+       int x2[] = {2, 2};
+       int x3[] = {3, 3};
+       int x4[] = {4, 4};
 
        srna= RNA_def_struct(brna, name, "Uniform");
        RNA_def_struct_ui_text(srna, name, doc);
        RNA_def_struct_sdna(srna, "Uniform");
 
-       prop= RNA_def_property(srna, "value", type, PROP_NONE);
-       if (size > 1)
+       prop= RNA_def_property(srna, "value", type, subtype);
+       
+       if (size == 4 && subtype == PROP_MATRIX)
+               RNA_def_property_multi_array(prop, 2, x2);
+       else if (size == 9)
+               RNA_def_property_multi_array(prop, 2, x3);
+       else if (size == 16)
+               RNA_def_property_multi_array(prop, 2, x4);
+       else if (size > 1)
                RNA_def_property_array(prop, size);
 
        if (type == PROP_INT)
@@ -295,6 +311,9 @@
                {SHADER_UNF_IVEC3, "IVEC3", 0, "ivec3", "ivec3"},
                {SHADER_UNF_IVEC4, "IVEC4", 0, "ivec4", "ivec4"},
                {SHADER_UNF_SAMPLER2D, "SAMPLER2D", 0, "sampler2D", 
"sampler2D"},
+               {SHADER_UNF_MAT2, "MAT2", 0, "mat2", "mat2"},
+               {SHADER_UNF_MAT3, "MAT3", 0, "mat3", "mat3"},
+               {SHADER_UNF_MAT4, "MAT4", 0, "mat4", "mat4"},
                {0, NULL, 0, NULL, NULL}};
                
        srna= RNA_def_struct(brna, "Uniform", NULL);
@@ -315,15 +334,18 @@
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Uniform type", "The data type of the 
uniform");
 
-       rna_def_uniformtype(brna, "FloatUniform", "Custom float uniform", 
PROP_FLOAT, 1);
-       rna_def_uniformtype(brna, "IntUniform", "Custom integer uniform", 
PROP_INT, 1);
-       rna_def_uniformtype(brna, "Vec2Uniform", "Custom float vector 2 
uniform", PROP_FLOAT, 2);
-       rna_def_uniformtype(brna, "Vec3Uniform", "Custom float vector 3 
uniform", PROP_FLOAT, 3);
-       rna_def_uniformtype(brna, "Vec4Uniform", "Custom float vector 4 
uniform", PROP_FLOAT, 4);
-       rna_def_uniformtype(brna, "IVec2Uniform", "Custom integer vector 2 
uniform", PROP_INT, 2);
-       rna_def_uniformtype(brna, "IVec3Uniform", "Custom integer vector 3 
uniform", PROP_INT, 3);
-       rna_def_uniformtype(brna, "IVec4Uniform", "Custom integer vector 4 
uniform", PROP_INT, 4);
-       rna_def_uniformtype(brna, "Sampler2DUniform", "Custom sampler2D 
uniform", PROP_POINTER, 1);
+       rna_def_uniformtype(brna, "FloatUniform", "Custom float uniform", 
PROP_FLOAT, PROP_NONE, 1);
+       rna_def_uniformtype(brna, "IntUniform", "Custom integer uniform", 
PROP_INT, PROP_NONE, 1);
+       rna_def_uniformtype(brna, "Vec2Uniform", "Custom float vector 2 
uniform", PROP_FLOAT, PROP_NONE, 2);
+       rna_def_uniformtype(brna, "Vec3Uniform", "Custom float vector 3 
uniform", PROP_FLOAT, PROP_NONE, 3);
+       rna_def_uniformtype(brna, "Vec4Uniform", "Custom float vector 4 
uniform", PROP_FLOAT, PROP_NONE, 4);
+       rna_def_uniformtype(brna, "IVec2Uniform", "Custom integer vector 2 
uniform", PROP_INT, PROP_NONE, 2);
+       rna_def_uniformtype(brna, "IVec3Uniform", "Custom integer vector 3 
uniform", PROP_INT, PROP_NONE, 3);
+       rna_def_uniformtype(brna, "IVec4Uniform", "Custom integer vector 4 
uniform", PROP_INT, PROP_NONE, 4);
+       rna_def_uniformtype(brna, "Mat2Uniform", "Custom 2x2 matrix uniform", 
PROP_FLOAT, PROP_MATRIX, 4);
+       rna_def_uniformtype(brna, "Mat3Uniform", "Custom 3x3 matrix uniform", 
PROP_FLOAT, PROP_MATRIX, 9);
+       rna_def_uniformtype(brna, "Mat4Uniform", "Custom 4x4 matrix uniform", 
PROP_FLOAT, PROP_MATRIX, 16);
+       rna_def_uniformtype(brna, "Sampler2DUniform", "Custom sampler2D 
uniform", PROP_POINTER, PROP_NONE, 1);
 }
 
 static void rna_def_shader_shaderlink(BlenderRNA *brna)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to