[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53307] branches/ge_harmony: Adding support for mat2, mat3, and mat4 uniforms to custom shaders.
Daniel Stokes
kupomail at gmail.com
Mon Dec 24 04:27:13 CET 2012
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)
More information about the Bf-blender-cvs
mailing list