[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29698] branches/soc-2010-moguri/source/ blender/gpu/intern/gpu_material.c: Adding support for uniform values from RNA values.
Mitchell Stokes
mogurijin at gmail.com
Sat Jun 26 01:13:37 CEST 2010
Revision: 29698
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29698
Author: moguri
Date: 2010-06-26 01:13:37 +0200 (Sat, 26 Jun 2010)
Log Message:
-----------
Adding support for uniform values from RNA values. Currently the following are supported:
* diffuse_color
* specular_colir
* alpha
* emit
More can be added easily.
Modified Paths:
--------------
branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c
Modified: branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c 2010-06-25 22:45:42 UTC (rev 29697)
+++ branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c 2010-06-25 23:13:37 UTC (rev 29698)
@@ -44,6 +44,8 @@
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
+#include "RNA_access.h"
+
#include "BKE_anim.h"
#include "BKE_colortools.h"
#include "BKE_DerivedMesh.h"
@@ -65,6 +67,15 @@
#include <string.h>
+/* Supported RNA values for uniforms */
+#define rna_floats_size 4
+char* rna_floats[rna_floats_size] = {
+ "diffuse_color",
+ "specular_color",
+ "alpha",
+ "emit",
+};
+
/* Structs */
typedef enum DynMatProperty {
@@ -362,7 +373,8 @@
if(material->pass) {
GPUShader *shader = GPU_pass_shader(material->pass);
CustomUniform *cu;
- int loc;
+ int loc, i;
+ PointerRNA ma_ptr;
LinkData *nlink;
GPULamp *lamp;
float invmat[4][4], col[4];
@@ -419,6 +431,36 @@
}
}
+ /* handle rna uniforms */
+ RNA_pointer_create((ID*)material->ma, &RNA_Material, material->ma, &ma_ptr);
+
+ for(i=0; i<rna_floats_size; i++)
+ {
+ loc = GPU_shader_get_uniform(shader, rna_floats[i]);
+
+ if (loc > -1)
+ {
+ int array_length = RNA_property_array_length(&ma_ptr, RNA_struct_find_property(&ma_ptr, rna_floats[i]));
+
+ if (array_length > 1)
+ {
+ float *val = MEM_mallocN(sizeof(float)*array_length, "rna_float");
+ RNA_float_get_array(&ma_ptr, rna_floats[i], val);
+
+ GPU_shader_uniform_vector(shader, loc, array_length, 1, val);
+
+ MEM_freeN(val);
+ }
+ else
+ {
+ float val;
+ val = RNA_float_get(&ma_ptr, rna_floats[i]);
+ GPU_shader_uniform_vector(shader, loc, 1, 1, &val);
+ }
+ }
+ }
+
+
/* update lamps */
for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
lamp= nlink->data;
More information about the Bf-blender-cvs
mailing list