Index: source/blender/python/api2_2x/sceneRender.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/python/api2_2x/sceneRender.c,v retrieving revision 1.52 diff -r1.52 sceneRender.c 36a37,38 > #include "DNA_screen_types.h" > #include "DNA_world_types.h" 41a44,45 > #include "BKE_main.h" > #include "BKE_bad_level_calls.h" 48a53,56 > #include "BDR_sculptmode.h" > > #include "IMB_imbuf_types.h" > 49a58 > #include "RE_shader_ext.h" 55d63 < 129a138,139 > static PyObject *RenderData_RenderBake( BPy_RenderData * self, > PyObject * args ); 412a423,498 > PyObject *RenderData_RenderBake ( BPy_RenderData * self, PyObject *args ) > { > int mode; > > Scene *oldsce; > short prev_r_raytrace= 0, prev_wo_amb_occ= 0; > Render *re; > int timer=0, tot, sculptmode= G.f & G_SCULPTMODE; > > if (!PyArg_ParseTuple(args, "i", &mode)) > return EXPP_ReturnPyObjError( PyExc_TypeError, > "expected mode argument"); > if (mode < 0 || mode > 4) > return EXPP_ReturnPyObjError( PyExc_TypeError, > "mode value not valid"); > > oldsce = G.scene; > set_scene( self->scene ); > > if(G.scene->r.renderer!=R_INTERN) > return EXPP_ReturnPyObjError( PyExc_RuntimeError, > "Bake only supported for Internal Renderer"); > > re = RE_NewRender("_Bake View_"); > > if(sculptmode) set_sculptmode(); > > if(mode==RE_BAKE_AO) { > if(G.scene->world==NULL) { > return EXPP_ReturnPyObjError( PyExc_RuntimeError, > "No world setup" ); > } > > /* If raytracing or AO is disabled, switch it on temporarily for baking. */ > prev_r_raytrace = (G.scene->r.mode & R_RAYTRACE) != 0; > prev_wo_amb_occ = (G.scene->world->mode & WO_AMB_OCC) != 0; > > G.scene->r.mode |= R_RAYTRACE; > G.scene->world->mode |= WO_AMB_OCC; > } > > RE_Database_Baking(re, G.scene, mode); > > tot = RE_bake_shade_all_selected(re, mode); > > RE_Database_Free(re); > > if(tot==0) > return EXPP_ReturnPyObjError( PyExc_RuntimeError, > "No Images found to bake to" ); > > else { > Image *ima; > /* force OpenGL reload */ > for(ima= G.main->image.first; ima; ima= ima->id.next) { > if(ima->ok==IMA_OK_LOADED) { > ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); > if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) > free_realtime_image(ima); > } > } > } > > /* restore raytrace and AO */ > if(mode==RE_BAKE_AO) { > if( prev_wo_amb_occ == 0) G.scene->world->mode &= ~WO_AMB_OCC; > if( prev_r_raytrace == 0) G.scene->r.mode &= ~R_RAYTRACE; > } > > if(sculptmode) set_sculptmode(); > > set_scene( oldsce ); > > Py_RETURN_TRUE; > } > 2233a2320,2321 > {"renderBake", ( PyCFunction ) RenderData_RenderBake, METH_VARARGS, > "(mode) - render baking"}, 2618a2707,2725 > static PyObject *M_Render_BakeModesDict( void ) > { > PyObject *M = PyConstant_New( ); > if( M ) { > BPy_constant *d = ( BPy_constant * ) M; > PyConstant_Insert( d, "LIGHT", > PyInt_FromLong( RE_BAKE_LIGHT) ); > PyConstant_Insert( d, "ALL", > PyInt_FromLong( RE_BAKE_ALL) ); > PyConstant_Insert( d, "AO", > PyInt_FromLong( RE_BAKE_AO) ); > PyConstant_Insert( d, "NORMALS", > PyInt_FromLong( RE_BAKE_NORMALS) ); > PyConstant_Insert( d, "TEXTURE", > PyInt_FromLong( RE_BAKE_TEXTURE) ); > } > return M; > } > 2627a2735 > PyObject *BakeModesDict = M_Render_BakeModesDict( ); 2640a2749,2750 > if( BakeModesDict ) > PyModule_AddObject( submodule, "BakeModes", BakeModesDict );