[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