diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2009-11-10 03:03:31 +0300 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2009-11-10 03:03:31 +0300 |
commit | 51efe7de27119587c918a1e5cc429acca8ca672f (patch) | |
tree | 464c39158e29a8063517a6dce9f49cf690ecedfc | |
parent | b65008dd6f113974bdf67082eea5ec10c93913b7 (diff) |
Improved context handling. Previously FRS_initialize() was used for both
initializing Freestyle and specifying contexts, making the API a bit messy.
Now FRS_initialize() is only for initialization, and contexts are specified
by new FRS_set_context() function just before starting rendering.
8 files changed, 37 insertions, 16 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index a1537b2ddf5..f096db38f35 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2671,6 +2671,9 @@ static int screen_render_exec(bContext *C, wmOperator *op) } RE_test_break_cb(re, NULL, (int (*)(void *)) blender_test_break); + /* inform Freestyle of the context */ + FRS_set_context(C); + if(RNA_boolean_get(op->ptr, "animation")) RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->frame_step); else @@ -2945,6 +2948,9 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) /* handle UI stuff */ WM_cursor_wait(1); + /* inform Freestyle of the context */ + FRS_set_context(C); + /* flush multires changes (for sculpt) */ multires_force_update(CTX_data_active_object(C)); diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h index 73aae416819..1add5f97b38 100644 --- a/source/blender/freestyle/FRS_freestyle.h +++ b/source/blender/freestyle/FRS_freestyle.h @@ -16,7 +16,8 @@ extern "C" { extern int freestyle_viewport[4]; // Rendering - void FRS_initialize(bContext* C); + void FRS_initialize(); + void FRS_set_context(bContext* C); void FRS_add_Freestyle( struct Render* re); void FRS_exit(); diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp index 6b7f095c6ac..46f45f139fe 100755 --- a/source/blender/freestyle/intern/application/Controller.cpp +++ b/source/blender/freestyle/intern/application/Controller.cpp @@ -71,7 +71,7 @@ extern "C" { -Controller::Controller(bContext* C) +Controller::Controller() { const string sep(Config::DIR_SEP.c_str()); @@ -108,7 +108,7 @@ Controller::Controller(bContext* C) _Canvas = new AppCanvas; - _inter = new PythonInterpreter(C); + _inter = new PythonInterpreter(); _EnableQI = true; _ComputeRidges = true; _ComputeSteerableViewMap = false; @@ -175,6 +175,13 @@ void Controller::setView(AppView *iView) _Canvas->setViewer(_pView); } +void Controller::setContext(bContext *C) +{ + PythonInterpreter* py_inter = dynamic_cast<PythonInterpreter*>(_inter); + assert(py_inter != 0); + py_inter->setContext(C); +} + int Controller::LoadMesh(Render *re, SceneRenderLayer* srl) { diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h index 99d85434811..4734462b7a5 100755 --- a/source/blender/freestyle/intern/application/Controller.h +++ b/source/blender/freestyle/intern/application/Controller.h @@ -66,10 +66,11 @@ extern "C" { class Controller { public: - Controller(bContext* C) ; + Controller() ; ~Controller() ; void setView(AppView *iView); + void setContext(bContext *C); //soc void init_options(); diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp index 8c5d7b0288a..0f2160d7bf6 100644 --- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp +++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp @@ -45,13 +45,13 @@ extern "C" { // Initialization //======================================================= - void FRS_initialize(bContext* C){ + void FRS_initialize() { if( freestyle_is_initialized ) return; pathconfig = new Config::Path; - controller = new Controller(C); + controller = new Controller(); view = new AppView; controller->setView(view); @@ -60,6 +60,11 @@ extern "C" { freestyle_is_initialized = 1; } + void FRS_set_context(bContext* C) { + cout << "FRS_set_context: context 0x" << C << " scene 0x" << CTX_data_scene(C) << endl; + controller->setContext(C); + } + void FRS_exit() { delete pathconfig; delete controller; @@ -205,7 +210,7 @@ extern "C" { displayed_layer_count(srl) > 0 ) { cout << "\n----------------------------------------------------------" << endl; - cout << "| "<< srl->name << endl; + cout << "| " << (re->scene->id.name+2) << "|" << srl->name << endl; cout << "----------------------------------------------------------" << endl; // prepare Freestyle: diff --git a/source/blender/freestyle/intern/system/PythonInterpreter.h b/source/blender/freestyle/intern/system/PythonInterpreter.h index e04e1d9b9d1..bf1a5064d3e 100755 --- a/source/blender/freestyle/intern/system/PythonInterpreter.h +++ b/source/blender/freestyle/intern/system/PythonInterpreter.h @@ -51,9 +51,9 @@ class LIB_SYSTEM_EXPORT PythonInterpreter : public Interpreter { public: - PythonInterpreter(bContext* C) { + PythonInterpreter() { _language = "Python"; - _context = C; + _context = 0; //Py_Initialize(); } @@ -61,6 +61,10 @@ class LIB_SYSTEM_EXPORT PythonInterpreter : public Interpreter //Py_Finalize(); } + void setContext(bContext *C) { + _context = C; + } + int interpretFile(const string& filename) { initPath(); diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 640aab1c84e..b2e55c8532e 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -89,8 +89,6 @@ #include "GPU_draw.h" -#include "FRS_freestyle.h" - // XXX #include "BPY_extern.h" #include "WM_api.h" @@ -270,8 +268,6 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) writeBlog(); } - FRS_initialize(C); - // XXX undo_editmode_clear(); BKE_reset_undo(); BKE_write_undo(C, "original"); /* save current state */ @@ -331,8 +327,6 @@ int WM_read_homefile(bContext *C, wmOperator *op) strcpy(G.sce, scestr); /* restore */ wm_init_userdef(); - FRS_initialize(C); - /* When loading factory settings, the reset solid OpenGL lights need to be applied. */ GPU_default_lights(); diff --git a/source/creator/creator.c b/source/creator/creator.c index bfcb4c9f5cc..264abf823e9 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -548,6 +548,10 @@ int main(int argc, char **argv) printf("Example: setenv BF_TIFF_LIB /usr/lib/libtiff.so\n"); } + /* initialize Freestyle */ + FRS_initialize(); + FRS_set_context(C); + /* OK we are ready for it */ for(a=1; a<argc; a++) { @@ -842,7 +846,6 @@ int main(int argc, char **argv) if (G.background) { int retval = BKE_read_file(C, argv[a], NULL, NULL); - FRS_initialize(C); /*we successfully loaded a blend file, get sure that pointcache works */ |