[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