diff --git a/release/scripts/bpymodules/BPyRender.py b/release/scripts/bpymodules/BPyRender.py index 1d8ed1c07a6..514d62bd64f 100644 --- a/release/scripts/bpymodules/BPyRender.py +++ b/release/scripts/bpymodules/BPyRender.py @@ -181,7 +181,7 @@ def imageFromObjectsOrtho(objects, path, width, height, smooth, alpha= True, cam Blender.Window.RedrawAll() - render_context.threads= True # good for dual core cpu's + render_context.threads= 2 # good for dual core cpu's render_context.render() render_context.saveRenderedImage(path) Render.CloseRenderWindow() diff --git a/source/blender/python/api2_2x/doc/Render.py b/source/blender/python/api2_2x/doc/Render.py index 5f2c0d908d4..1ab8afc4556 100644 --- a/source/blender/python/api2_2x/doc/Render.py +++ b/source/blender/python/api2_2x/doc/Render.py @@ -54,7 +54,7 @@ boolean attributes. - MBLUR: Motion blur enabled - UNIFIED: Unified Renderer enabled - RAYTRACING: Ray tracing enabled - - THREADS: Render in two threads enabled + - THREADS: Render in two threads enabled (Deprecated, use L{RenderData.threads}) @type SceModes: readonly dictionary @var SceModes: Constant dict used for with L{RenderData.sceneMode} bitfield attribute. @@ -62,6 +62,8 @@ Values can be ORed together. Individual bits can also be set/cleared with boolean attributes. - SEQUENCER: Enables sequencer output rendering. - EXTENSION: Adds extensions to the output when rendering animations. + - SAVE_BUFFERS: Save render tiles to disk to save memory. + - FREE_IMAGES: Free images used by textures after each render. @type FramingModes: readonly dictionary @var FramingModes: Constant dict used for with L{RenderData.gameFrame} @@ -215,9 +217,8 @@ class RenderData: Valid values are 0 (display in image editor view), 1 (display in render window), or 2 (display full screen). @type displayMode: int - @ivar threads: Render in two threads enabled. - Also see B{THREADS} in L{Modes} constant dict. - @type threads: boolean + @ivar threads: Number of threads to render, clamed [1-8] + @type threads: int @ivar backbufPath: Path to a background image (setting loads image). @type backbufPath: string @ivar toonShading: Toon edge shading enabled. @@ -229,18 +230,33 @@ class RenderData: @ivar gameFrameColor: RGB color triplet for bars. Values are clamped in the range [0.0,1.0]. @type gameFrameColor: list of RGB 3 floats - @ivar extensions: Add extensions to output (when rendering animations). - Also see B{EXTENSION} in L{SceModes} constant dict. - @type extensions: boolean + @ivar saveBuffers: Save tiles for all renderlayers to disk saving memory. + Also see B{SAVE_BUFFERS} in L{SceModes} constant dict. + @type saveBuffers: boolean @ivar sizeY: Image height (in pixels). Values are clamped to the range [4,10000]. @type sizeY: int @ivar renderer: Rendering engine choice. Valid values are 0 (internal) or 1 (Yafray). @type renderer: int + @ivar sequencer: Enables sequencer output rendering. Also see B{SEQUENCER} in L{SceModes} constant dict. @type sequencer: boolean + @ivar extensions: Add extensions to output (when rendering animations). + Also see B{EXTENSION} in L{SceModes} constant dict. + @type extensions: boolean + @ivar compositor: 'Do Compositor' enabled. + @type compositor: boolean + @ivar freeImages: 'Do Compositor' enabled. + @type freeImages: boolean + @ivar singleLayer: Only render the active layer. + @type singleLayer: boolean + @ivar saveBuffers: Save render buffers to disk while rendering, saves memory. + @type saveBuffers: boolean + @ivar compositeFree: Free nodes that are not used while composite. + @type compositeFree: boolean + @ivar panorama: Panorama rendering enabled. Also see B{PANORAMA} in L{Modes} constant dict. @type panorama: boolean diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c index 953e25d5277..e37acb00680 100644 --- a/source/blender/python/api2_2x/sceneRender.c +++ b/source/blender/python/api2_2x/sceneRender.c @@ -540,12 +540,6 @@ PyObject *RenderData_EnableBackbuf( BPy_RenderData * self, PyObject * args ) &self->renderContext->bufflag ); } -PyObject *RenderData_EnableThreads( BPy_RenderData * self, PyObject * args ) -{ - return M_Render_BitToggleInt( args, R_THREADS, - &self->renderContext->mode ); -} - PyObject *RenderData_EnableExtensions( BPy_RenderData * self, PyObject * args ) { return M_Render_BitToggleShort( args, R_EXTENSION, @@ -1968,6 +1962,28 @@ static int RenderData_setSet( BPy_RenderData *self, PyObject *value ) return 0; } + +PyObject *RenderData_getThreads( BPy_RenderData * self ) +{ + return PyInt_FromLong( (long) self->renderContext->threads ); +} + +static int RenderData_setThreads( BPy_RenderData *self, PyObject *value ) +{ + int threads; + + if( !PyInt_CheckExact( value ) ) + return EXPP_ReturnIntError( PyExc_TypeError, "Error, threads must be an int" ); + + threads = PyInt_AsLong( value ); + if (threads<1) threads = 1; + else if (threads>8) threads = 8; + + self->renderContext->threads = (short)threads; + EXPP_allqueue( REDRAWBUTSSCENE, 0 ); + return 0; +} + /***************************************************************************/ /* BPy_RenderData attribute def */ /***************************************************************************/ @@ -2032,24 +2048,47 @@ static PyGetSetDef BPy_RenderData_getseters[] = { (void *)R_RAYTRACE}, /* R_GAUSS unused */ /* R_FBUF unused */ +/* R_THREADS unused */ {"threads", - (getter)RenderData_getModeBit, (setter)RenderData_setModeBit, - "Render in two threads enabled", - (void *)R_THREADS}, + (getter)RenderData_getThreads, (setter)RenderData_setThreads, + "Number of threads used to render", + NULL}, /* R_SPEED unused */ {"mode", (getter)RenderData_getMode, (setter)RenderData_setMode, "Mode bitfield", NULL}, - {"extensions", - (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, - "Add extensions to output (when rendering animations) enabled", - (void *)R_EXTENSION}, + /* scene modes */ {"sequencer", (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, "'Do Sequence' enabled", (void *)R_DOSEQ}, + {"extensions", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "Add extensions to output (when rendering animations) enabled", + (void *)R_EXTENSION}, + {"compositor", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "'Do Compositor' enabled.", + (void *)R_DOCOMP}, + {"freeImages", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "Free texture images after render.", + (void *)R_FREE_IMAGE}, + {"singleLayer", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "Only render the active layer.", + (void *)R_SINGLE_LAYER}, + {"saveBuffers", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "Save render buffers to disk while rendering, saves memory.", + (void *)R_EXR_TILE_FILE}, + {"compositeFree", + (getter)RenderData_getSceModeBits, (setter)RenderData_setSceModeBits, + "Free nodes that are not used while composite.", + (void *)R_COMP_FREE}, + {"sceneMode", (getter)RenderData_getSceMode, (setter)RenderData_setSceMode, "Scene mode bitfield", @@ -2213,9 +2252,6 @@ static PyMethodDef BPy_RenderData_methods[] = { {"enableBackbuf", ( PyCFunction ) RenderData_EnableBackbuf, METH_VARARGS, "(bool) - enable/disable the backbuf image"}, - {"enableThreads", ( PyCFunction ) RenderData_EnableThreads, - METH_VARARGS, - "(bool) - enable/disable threaded rendering"}, {"setFtypePath", ( PyCFunction ) RenderData_SetFtypePath, METH_VARARGS, "(string) - get/set the path to output the Ftype file"}, {"getFtypePath", ( PyCFunction ) RenderData_getFtypePath, METH_NOARGS,