[Bf-blender-cvs] [1980143] bake-cycles: Cycles-Bake: using BL::BakePixel instead of BakePixel inside Cycles

Dalai Felinto noreply at git.blender.org
Wed Apr 23 02:46:35 CEST 2014


Commit: 198014361544403c923ede9b78b2f9e55de989ec
Author: Dalai Felinto
Date:   Wed Jan 15 01:48:37 2014 -0200
https://developer.blender.org/rB198014361544403c923ede9b78b2f9e55de989ec

Cycles-Bake: using BL::BakePixel instead of BakePixel inside Cycles

===================================================================

M	intern/cycles/blender/blender_python.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_session.h
M	intern/cycles/render/bake.h
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/render/extern/include/RE_engine.h

===================================================================

diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 068216c..d6d3ac4 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -166,11 +166,13 @@ static PyObject *bake_func(PyObject *self, PyObject *args)
 	RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyobject), &objectptr);
 	BL::Object b_object(objectptr);
 
-	void *b_bakepixel(PyLong_AsVoidPtr(pypixel_array));
 	void *b_result(PyLong_AsVoidPtr(pyresult));
 
-	session->bake(b_object, pass_type, (BakePixel *)b_bakepixel, num_pixels, depth, (float *)b_result);
-	//session->bake(b_object, pass_type, b_bakepixel, num_pixels, depth, (float *)b_result);
+	PointerRNA bakepixelptr;
+	RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pypixel_array), &bakepixelptr);
+	BL::BakePixel b_bake_pixel(bakepixelptr);
+
+	session->bake(b_object, pass_type, b_bake_pixel, num_pixels, depth, (float *)b_result);
 
 	Py_END_ALLOW_THREADS
 
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index dbb40dc..76e668f 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -498,37 +498,45 @@ void BlenderSession::render()
 	sync = NULL;
 }
 
-
-/* XXX I would like those to be in bake.cpp, but I'm running into some namespace problems for that
-   (BL:: is nowhere defined) - I can move the bake to inside 'blender', but that doesn't sound correct
-   I believe the fix is to get the bare minimum to the _bake functions, and not to pass the entire blender
-   object there.
- */
-#if 1
-void _bake_uv(BL::Object b_object, PassType pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[])
+void _bake_uv(BL::Object b_object, PassType pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[])
 {
+	BL::BakePixel bp = pixel_array;
+
 	/* just plots the internal uv back to the results for now */
 	for (int i=0; i < num_pixels; i++) {
 		int offset = i * depth;
-		result[offset] = pixel_array[i].u;
-		result[offset + 1] = pixel_array[i].v;
+		result[offset] = bp.u();
+		result[offset + 1] = bp.v();
+
+		bp = bp.next();
 	}
 }
-#else
-void _bake_uv(BL::Object b_object, PassType pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[]) {}
-#endif
 
-void _bake_background(BL::Object b_object, PassType pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[]) {}
+void _bake_background(BL::Object b_object, PassType pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[]) {}
 
-void _bake_combined(BL::Object b_object, PassType pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[]) {}
+void _bake_combined(BL::Object b_object, PassType pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[]) {}
 
-void _bake_depth(BL::Object b_object, PassType pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[]) {}
+void _bake_depth(BL::Object b_object, PassType pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[]) {}
 
-void BlenderSession::bake(BL::Object b_object, const string& s_pass_type, BakePixel *pixel_array, int num_pixels, int depth, float result[])
+void BlenderSession::bake(BL::Object b_object, const string& s_pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[])
 {
+
 	/* XXX temporary function until we get real pass_types (int) instead of strings */
 	PassType pass_type = get_pass_type(s_pass_type);
 
+	/*****
+	 TODO LIST:
+
+	 1) get render result to be damped in float result[]
+
+	 2) convert BakePixel to position + normal list + render array.
+
+	 3) create new render camera 'BAKE'
+
+	 4) use BL::BakePixel instead of BakePixel <done> :)
+
+	 */
+
 	switch(pass_type) {
 		case PASS_UV:
 			_bake_uv(b_object, pass_type, pixel_array, num_pixels, depth, result);
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index 640d29a..0e44493 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -52,7 +52,7 @@ public:
 	/* offline render */
 	void render();
 
-	void bake(BL::Object b_object, const string& pass_type, BakePixel pixel_array[], int num_pixels, int depth, float pixels[]);
+	void bake(BL::Object b_object, const string& pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float pixels[]);
 
 	void write_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderTile& rtile);
 	void write_render_tile(RenderTile& rtile);
diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h
index a9d05e2..db287c3 100644
--- a/intern/cycles/render/bake.h
+++ b/intern/cycles/render/bake.h
@@ -25,16 +25,6 @@
 
 CCL_NAMESPACE_BEGIN
 
-struct BakePixel;
-
-/* plain copy from Blender */
-typedef struct BakePixel {
-	int primitive_id;
-	float u, v;
-	float dudx, dudy;
-	float dvdx, dvdy;
-} BakePixel;
-
 //void do_bake(BL::Object b_object, const string& pass_type, BakePixel pixel_array[], int num_pixels, int depth, float pixels[]);
 
 CCL_NAMESPACE_END
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index df11f30..cab0a19 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -38,6 +38,7 @@
 
 #include "RE_engine.h"
 #include "RE_pipeline.h"
+#include "RE_engine.h"
 
 
 EnumPropertyItem render_pass_type_items[] = {
@@ -151,7 +152,7 @@ static void engine_render(RenderEngine *engine, struct Scene *scene)
 }
 
 static void engine_bake(RenderEngine *engine, struct Scene *scene, struct Object *object, int pass_type,
-                        void *pixel_array, int num_pixels, int depth, void *result)
+                        struct BakePixel *pixel_array, int num_pixels, int depth, void *result)
 {
 	extern FunctionRNA rna_RenderEngine_bake_func;
 	PointerRNA ptr;
@@ -375,6 +376,12 @@ void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values)
 	memcpy(rpass->rect, values, sizeof(float) * rpass->rectx * rpass->recty * rpass->channels);
 }
 
+static PointerRNA rna_BakePixel_next_get(PointerRNA *ptr)
+{
+	BakePixel *bp = ptr->data;
+	return rna_pointer_inherit_refine(ptr, &RNA_BakePixel, bp + 1);
+}
+
 #else /* RNA_RUNTIME */
 
 static void rna_def_render_engine(BlenderRNA *brna)
@@ -411,7 +418,7 @@ static void rna_def_render_engine(BlenderRNA *brna)
 	RNA_def_property_flag(prop, PROP_REQUIRED);
 	prop = RNA_def_enum(func, "pass_type", render_pass_type_items, 0, "Pass", "Pass to bake");
 	RNA_def_property_flag(prop, PROP_REQUIRED);
-	prop = RNA_def_pointer(func, "pixel_array", "AnyType", "", "");
+	prop = RNA_def_pointer(func, "pixel_array", "BakePixel", "", "");
 	RNA_def_property_flag(prop, PROP_REQUIRED);
 	prop = RNA_def_int(func, "num_pixels", 0, 0, INT_MAX, "Number of Pixels", "Size of the baking batch", 0, INT_MAX);
 	RNA_def_property_flag(prop, PROP_REQUIRED);
@@ -697,12 +704,59 @@ static void rna_def_render_pass(BlenderRNA *brna)
 	RNA_define_verify_sdna(1);
 }
 
+static void rna_def_render_bake_pixel(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "BakePixel", NULL);
+	RNA_def_struct_ui_text(srna, "Bake Pixel", "");
+
+	RNA_define_verify_sdna(0);
+
+	prop = RNA_def_property(srna, "primitive_id", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "primitive_id");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "u", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "u");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "v", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "v");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "dudx", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "dudx");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "dudy", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "dudy");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "dvdx", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "dvdx");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "dvdy", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "dvdy");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	prop = RNA_def_property(srna, "next", PROP_POINTER, PROP_NONE);
+	RNA_def_property_struct_type(prop, "BakePixel");
+	RNA_def_property_pointer_funcs(prop, "rna_BakePixel_next_get", NULL, NULL, NULL);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+	RNA_define_verify_sdna(1);
+}
+
 void RNA_def_render(BlenderRNA *brna)
 {
 	rna_def_render_engine(brna);
 	rna_def_render_result(brna);
 	rna_def_render_layer(brna);
 	rna_def_render_pass(brna);
+	rna_def_render_bake_pixel(brna);
 }
 
 #endif /* RNA_RUNTIME */
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index ddd2034..7c917c3 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -87,8 +87,7 @@ typedef struct RenderEngineType {
 
 	void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
 	void (*render)(struct RenderEngine *engine, struct Scene *scene);
-//	void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, int pass_type, struct BakePixel pixel_array[], int num_pixels, int depth, float result[]);
-	void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, int pass_type, void *pixel_array, int num_pixels, int depth, void *result);
+	void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, int pass_type, struct BakePixel *pixel_array, int num_pixels, int depth, void *result);
 
 	void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
 	void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);




More information about the Bf-blender-cvs mailing list