[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21942] branches/blender2.5/blender: render api utility function to initialize a render layer from an image rather then loading through python .
Campbell Barton
ideasman42 at gmail.com
Mon Jul 27 20:50:11 CEST 2009
Revision: 21942
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21942
Author: campbellbarton
Date: 2009-07-27 20:50:10 +0200 (Mon, 27 Jul 2009)
Log Message:
-----------
render api utility function to initialize a render layer from an image rather then loading through python.
lay = result.layers[0]
lay.rect_from_file("somefile.png", part.x, part.y)
If the source image is bigger then the render layer x/y offsets can be used to choose the part of the image use.
Modified Paths:
--------------
branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c
branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h
branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c
Modified: branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_view3d_toolbar.py 2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/release/ui/space_view3d_toolbar.py 2009-07-27 18:50:10 UTC (rev 21942)
@@ -27,7 +27,8 @@
col.itemO("object.duplicate")
col.itemO("object.delete")
- if context.active_object.type == 'MESH':
+ active_object= context.active_object
+ if active_object and active_object.type == 'MESH':
layout.itemL(text="Shading:")
col = layout.column(align=True)
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c 2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c 2009-07-27 18:50:10 UTC (rev 21942)
@@ -297,10 +297,21 @@
{
StructRNA *srna;
PropertyRNA *prop;
+ FunctionRNA *func;
srna= RNA_def_struct(brna, "RenderLayer", NULL);
RNA_def_struct_ui_text(srna, "Render Layer", "");
+ func= RNA_def_function(srna, "rect_from_file", "RE_layer_rect_from_file");
+ RNA_def_function_ui_description(func, "Copies the pixels of this renderlayer from an image file.");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ prop= RNA_def_string(func, "filename", "", 0, "Filename", "Filename to load into this render tile, must be no smaller then the renderlayer");
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+ prop= RNA_def_int(func, "x", 0, 0, INT_MAX, "Offset X", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+ prop= RNA_def_int(func, "y", 0, 0, INT_MAX, "Offset Y", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+
RNA_define_verify_sdna(0);
rna_def_render_layer_common(srna, 0);
Modified: branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h 2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h 2009-07-27 18:50:10 UTC (rev 21942)
@@ -39,6 +39,7 @@
struct Image;
struct NodeBlurData;
struct Object;
+struct ReportList;
struct RenderData;
struct RenderEngine;
struct RenderEngineType;
@@ -265,6 +266,8 @@
ListBase fullresult;
} RenderEngine;
+void RE_layer_rect_from_file(RenderLayer *layer, struct ReportList *reports, char *filename, int x, int y);
+
struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h);
void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result);
void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result);
Modified: branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c 2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c 2009-07-27 18:50:10 UTC (rev 21942)
@@ -45,6 +45,7 @@
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_object.h"
+#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_writeavi.h" /* <------ should be replaced once with generic movie module */
#include "BKE_pointcache.h"
@@ -2876,6 +2877,47 @@
re->i.statstr= NULL;
}
+/* loads in image into a result, size must match
+ * x/y offsets are only used on a partial copy when dimensions dont match */
+void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *filename, int x, int y)
+{
+ ImBuf *ibuf = IMB_loadiffname(filename, IB_rect);
+
+ if(ibuf && (ibuf->rect || ibuf->rect_float)) {
+ if (ibuf->x == layer->rectx && ibuf->y == layer->recty) {
+ if(ibuf->rect_float==NULL)
+ IMB_float_from_rect(ibuf);
+
+ memcpy(layer->rectf, ibuf->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
+ } else {
+ if ((ibuf->x - x >= layer->rectx) && (ibuf->y - y >= layer->recty)) {
+ ImBuf *ibuf_clip;
+
+ if(ibuf->rect_float==NULL)
+ IMB_float_from_rect(ibuf);
+
+ ibuf_clip = IMB_allocImBuf(layer->rectx, layer->recty, 32, IB_rectfloat, 0);
+ if(ibuf_clip) {
+ IMB_rectcpy(ibuf_clip, ibuf, 0,0, x,y, layer->rectx, layer->recty);
+
+ memcpy(layer->rectf, ibuf_clip->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
+ IMB_freeImBuf(ibuf_clip);
+ }
+ else {
+ BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to allocate clip buffer '%s'\n", filename);
+ }
+ }
+ else {
+ BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: incorrect dimensions for partial copy '%s'\n", filename);
+ }
+ }
+
+ IMB_freeImBuf(ibuf);
+ }
+ else {
+ BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to load '%s'\n", filename);
+ }
+}
static void external_render_3d(Render *re, RenderEngineType *type)
{
RenderEngine engine;
More information about the Bf-blender-cvs
mailing list