[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49347] branches/ge_harmony/source: Custom filter uniforms now work.
Daniel Stokes
kupomail at gmail.com
Sun Jul 29 06:42:16 CEST 2012
Revision: 49347
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49347
Author: kupoman
Date: 2012-07-29 04:42:12 +0000 (Sun, 29 Jul 2012)
Log Message:
-----------
Custom filter uniforms now work. Supported types are currently float, int, and their vector variants. Also fixed a bug where newly created filter was not being added to the list properly, as well as fixing things up for saving and loading.
Modified Paths:
--------------
branches/ge_harmony/source/blender/blenloader/intern/readfile.c
branches/ge_harmony/source/blender/blenloader/intern/writefile.c
branches/ge_harmony/source/blender/editors/render/render_shading.c
branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
Modified: branches/ge_harmony/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/ge_harmony/source/blender/blenloader/intern/readfile.c 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/blender/blenloader/intern/readfile.c 2012-07-29 04:42:12 UTC (rev 49347)
@@ -4838,6 +4838,8 @@
Sequence *seq;
SceneRenderLayer *srl;
TimeMarker *marker;
+
+ LinkData *link;
for (sce = main->scene.first; sce; sce = sce->id.next) {
if (sce->id.flag & LIB_NEEDLINK) {
@@ -4934,6 +4936,9 @@
}
/*Game Settings: Dome Warp Text*/
sce->gm.dome.warptext = newlibadr(fd, sce->id.lib, sce->gm.dome.warptext);
+
+ for (link = sce->gm.postfilters.first; link; link = link->next)
+ link->data = newlibadr_us(fd, sce->id.lib, link->data);
/* Motion Tracking */
sce->clip = newlibadr_us(fd, sce->id.lib, sce->clip);
@@ -5145,6 +5150,8 @@
sce->nodetree = newdataadr(fd, sce->nodetree);
if (sce->nodetree)
direct_link_nodetree(fd, sce->nodetree);
+
+ link_list(fd, &sce->gm.postfilters);
}
/* ************ READ WM ***************** */
@@ -8881,6 +8888,7 @@
{
Base *base;
SceneRenderLayer *srl;
+ LinkData *link;
for (base = sce->base.first; base; base = base->next) {
expand_doit(fd, mainvar, base->object);
@@ -8934,6 +8942,9 @@
#endif
expand_doit(fd, mainvar, sce->clip);
+
+ for (link = sce->gm.postfilters.first; link; link = link->next)
+ expand_doit(fd, mainvar, link->data);
}
static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)
Modified: branches/ge_harmony/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/ge_harmony/source/blender/blenloader/intern/writefile.c 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/blender/blenloader/intern/writefile.c 2012-07-29 04:42:12 UTC (rev 49347)
@@ -2137,6 +2137,8 @@
TransformOrientation *ts;
SceneRenderLayer *srl;
ToolSettings *tos;
+
+ LinkData *link;
sce= scebase->first;
while (sce) {
@@ -2269,6 +2271,12 @@
write_nodetree(wd, sce->nodetree);
}
+ /* write post-process filters */
+ for (link = sce->gm.postfilters.first; link; link = link->next) {
+ writestruct(wd, DATA, "LinkData", 1, link);
+ writestruct(wd, DATA, "Shader", 1, link->data);
+ }
+
sce= sce->id.next;
}
/* flush helps the compression for undo-save */
Modified: branches/ge_harmony/source/blender/editors/render/render_shading.c
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_shading.c 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/blender/editors/render/render_shading.c 2012-07-29 04:42:12 UTC (rev 49347)
@@ -495,7 +495,7 @@
RNA_property_update(C, &ptr, prop);
}
- scene->gm.actpostfilter = BLI_countlist(&scene->gm.postfilters) - 1;
+ scene->gm.actpostfilter = BLI_countlist(&scene->gm.postfilters);
return OPERATOR_FINISHED;
}
Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c 2012-07-29 04:42:12 UTC (rev 49347)
@@ -1344,7 +1344,7 @@
static PointerRNA rna_GameSettings_active_postfilter_get(PointerRNA *ptr)
{
GameData *gm = (GameData *)ptr->data;
- ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter);
+ ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter-1);
Shader *shader = (link) ? link->shader : NULL;
return rna_pointer_inherit_refine(ptr, &RNA_Shader, shader);
}
@@ -1354,12 +1354,12 @@
GameData *gm = (GameData *)ptr->data;
Shader *sh = (Shader*)value.data;
- ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter);
+ ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter-1);
if (!link)
{
link = MEM_callocN(sizeof(ShaderLink), "New Post Process Filter");
link->shader = sh;
- BLI_addtail(&gm->postfilters, sh);
+ BLI_addtail(&gm->postfilters, link);
}
else
{
@@ -2830,7 +2830,7 @@
prop = RNA_def_property(srna, "active_post_filter_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "actpostfilter");
- RNA_def_property_int_funcs(prop, NULL, NULL, "rna_GameSettings_active_postfilter_index_range");
+ RNA_def_property_int_funcs(prop, "rna_GameSettings_active_postfilter_index_get", "rna_GameSettings_active_postfilter_index_set", "rna_GameSettings_active_postfilter_index_range");
RNA_def_property_ui_text(prop, "Active Post Filter Index", "");
/* Recast Settings */
Modified: branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-29 04:42:12 UTC (rev 49347)
@@ -366,9 +366,9 @@
Shader *shader = link->shader;
if (shader) {
STR_String text = STR_String(shader->source);
- CustomUniform *uni;
- for (uni = (CustomUniform *)shader->uniforms.first; uni; uni = uni->next) {
- destinationscene->Update2DUniform(i, STR_String(uni->name), RAS_IRasterizer::RAS_FLOAT, uni->data);
+ Uniform *uni;
+ for (uni = (Uniform *)shader->uniforms.first; uni; uni = uni->next) {
+ destinationscene->Update2DUniform(i, STR_String(uni->name), (RAS_IRasterizer::RAS_UNIFORM_TYPE)uni->type, uni->data);
}
destinationscene->Update2DFilter(vector<STR_String>(), NULL, RAS_IRasterizer::RAS_2DFILTER_CUSTOMFILTER, i, text);
}
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h 2012-07-29 04:42:12 UTC (rev 49347)
@@ -437,7 +437,7 @@
RAS_2DFILTER_NUMBER_OF_FILTERS
};
enum RAS_UNIFORM_TYPE {
- RAS_FLOAT,
+ RAS_FLOAT = 1,
RAS_VEC2,
RAS_VEC3,
RAS_VEC4,
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp 2012-07-29 01:41:46 UTC (rev 49346)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp 2012-07-29 04:42:12 UTC (rev 49347)
@@ -277,7 +277,39 @@
if (uniformLoc != -1)
{
if (uniform.type == RAS_IRasterizer::RAS_FLOAT)
- glUniform1fARB(uniformLoc, *(float*)&uniform.data);
+ glUniform1fARB(uniformLoc, *(float*)&uniform.data);
+ else if (uniform.type == RAS_IRasterizer::RAS_VEC2)
+ {
+ float *value = (float*)uniform.data;
+ glUniform2fARB(uniformLoc, value[0], value[1]);
+ }
+ else if (uniform.type == RAS_IRasterizer::RAS_VEC3)
+ {
+ float *value = (float*)uniform.data;
+ glUniform3fARB(uniformLoc, value[0], value[1], value[2]);
+ }
+ else if (uniform.type == RAS_IRasterizer::RAS_VEC4)
+ {
+ float *value = (float*)uniform.data;
+ glUniform4fARB(uniformLoc, value[0], value[1], value[2], value[3]);
+ }
+ else if (uniform.type == RAS_IRasterizer::RAS_INT)
+ glUniform1iARB(uniformLoc, *(int*)&uniform.data);
+ else if (uniform.type == RAS_IRasterizer::RAS_IVEC2)
+ {
+ int *value = (int*)uniform.data;
+ glUniform2iARB(uniformLoc, value[0], value[1]);
+ }
+ else if (uniform.type == RAS_IRasterizer::RAS_IVEC3)
+ {
+ int *value = (int*)uniform.data;
+ glUniform3iARB(uniformLoc, value[0], value[1], value[2]);
+ }
+ else if (uniform.type == RAS_IRasterizer::RAS_IVEC4)
+ {
+ int *value = (int*)uniform.data;
+ glUniform4iARB(uniformLoc, value[0], value[1], value[2], value[3]);
+ }
}
}
}
More information about the Bf-blender-cvs
mailing list