diff options
author | Maxime Curioni <maxime.curioni@gmail.com> | 2008-10-01 19:03:35 +0400 |
---|---|---|
committer | Maxime Curioni <maxime.curioni@gmail.com> | 2008-10-01 19:03:35 +0400 |
commit | 06d2d97605381db00a212ccc6df09ca250b496d6 (patch) | |
tree | 197beed4a7c133054676fe0f4385139878b35fdf /source/blender | |
parent | 204f48c74e3a6f8a940aefea07f42e2a160d4171 (diff) |
soc-2008-mxcurioni: refactored Freestyle API to prepare for both rendering modes (OpenGL and Blender internal), applied a patch to allow CMake to be used for compilation.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/freestyle/FRS_freestyle.h | 2 | ||||
-rw-r--r-- | source/blender/freestyle/intern/app_blender/api.cpp | 103 | ||||
-rw-r--r-- | source/blender/python/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/render/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 14 | ||||
-rw-r--r-- | source/blender/src/CMakeLists.txt | 2 |
7 files changed, 34 insertions, 91 deletions
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt index a21eadf15fa..f5ca2c1a17f 100644 --- a/source/blender/CMakeLists.txt +++ b/source/blender/CMakeLists.txt @@ -24,7 +24,7 @@ # # ***** END GPL LICENSE BLOCK ***** -SUBDIRS(avi nodes blenkernel blenlib blenloader blenpluginapi imbuf imbuf/intern/cineon gpu makesdna python radiosity readblenfile render src yafray) +SUBDIRS(avi nodes blenkernel blenlib blenloader blenpluginapi imbuf imbuf/intern/cineon gpu makesdna python radiosity readblenfile render src yafray freestyle) IF(WITH_INTERNATIONAL) SUBDIRS(ftfont) diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h index 20ff6b72231..b736e767835 100644 --- a/source/blender/freestyle/FRS_freestyle.h +++ b/source/blender/freestyle/FRS_freestyle.h @@ -9,7 +9,7 @@ extern "C" { void FRS_initialize(); void FRS_prepare(Render* re); - void FRS_execute(Render* re, int render_in_layer); + void FRS_render_GL(Render* re); #ifdef __cplusplus } diff --git a/source/blender/freestyle/intern/app_blender/api.cpp b/source/blender/freestyle/intern/app_blender/api.cpp index ae0c551e461..b5ed0489c83 100644 --- a/source/blender/freestyle/intern/app_blender/api.cpp +++ b/source/blender/freestyle/intern/app_blender/api.cpp @@ -41,11 +41,10 @@ extern "C" { if( controller == NULL ) controller = new Controller; - if( view == NULL ) + if( view == NULL ) { view = new AppGLWidget; - - controller->setView(view); - controller->Clear(); + controller->setView(view); + } if( strlen(style_module) == 0 ){ string path( pathconfig->getProjectDir() + Config::DIR_SEP + "style_modules" + Config::DIR_SEP + "contour.py" ); @@ -82,23 +81,18 @@ extern "C" { view->_camera->setUpVector(camUp); view->_camera->setViewDirection(camDirection); } - - void FRS_load_mesh( Render *re ){ - controller->LoadMesh(re); - } + void FRS_prepare(Render* re) { - FRS_initialize(); + // init + FRS_initialize(); FRS_init_view(re); FRS_init_camera(re); + controller->Clear(); - FRS_load_mesh(re); - } - - void FRS_render(Render* re, int render_in_layer) { - - view->workingBuffer = GL_BACK; + // load mesh + controller->LoadMesh(re); // add style module cout << "Module: " << style_module << endl; @@ -110,76 +104,23 @@ extern "C" { // build strokes controller->DrawStrokes(); - - // render final result - view->draw(); } - void FRS_execute(Render* re, int render_in_layer) { - - if(render_in_layer) { - - // GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - // switch(status){ - // case GL_FRAMEBUFFER_COMPLETE_EXT: - // cout << "CORRECT: GL_FRAMEBUFFER_COMPLETE" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT" << endl; - // break; - // case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT" << endl; - // break; - // case GL_FRAMEBUFFER_UNSUPPORTED_EXT: - // cout << "ERROR: GL_FRAMEBUFFER_UNSUPPORTED" << endl; - // break; - // } + void FRS_render_GL(Render* re) { - RenderLayer *rl; - - for(rl = (RenderLayer *)re->result->layers.first; rl; rl= rl->next) - if(rl->layflag & SCE_LAY_FRS) - break; - - int p; - for(int j = 0; j < re->winy; j++) { - for(int i = 0; i < re->winx; i++){ - p = 4*(j*re->winx + i); - rl->rectf[p] *= 0.6; - rl->rectf[p + 1] = 0.6 * rl->rectf[p + 1]; - rl->rectf[p + 2] *= 0.6; - rl->rectf[p + 3] = 1.0; - } - } - - } else { - // used to reobtain ogl context after RE_Database_FromScene call - re->display_clear(re->result); - - // render strokes - FRS_render(re, render_in_layer); - - // display result - RenderResult rres; - RE_GetResultImage(re, &rres); - view->readPixels(0, 0, re->winx, re->winy, AppGLWidget::RGBA, rres.rectf ); - re->result->renlay = render_get_active_layer(re, re->result); - re->display_draw(re->result, NULL); - } - + cout << "Rendering Freestyle with OpenGL" << endl; + // render strokes + view->workingBuffer = GL_BACK; + view->draw(); + + // display result + RenderResult rres; + RE_GetResultImage(re, &rres); + view->readPixels(0, 0, re->winx, re->winy, AppGLWidget::RGBA, rres.rectf ); + re->result->renlay = render_get_active_layer(re, re->result); + re->display_draw(re->result, NULL); + controller->CloseFile(); } diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt index 63a1e67236e..c56d6f4ecde 100644 --- a/source/blender/python/CMakeLists.txt +++ b/source/blender/python/CMakeLists.txt @@ -35,6 +35,7 @@ SET(INC ../render/extern/include ../radiosity/extern/include ../makesdna ../../../intern/guardedalloc ../../../intern/bmfont ../imbuf ../include ${PYTHON_INC} ../../../extern/glew/include ../gpu + ../freestyle ../freestyle/intern/python ) IF(WITH_QUICKTIME) diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 0b659554d1a..0a5ac990507 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -30,6 +30,7 @@ SET(INC intern/include ../../../intern/guardedalloc ../blenlib ../makesdna extern/include ../blenkernel ../radiosity/extern/include ../imbuf ../quicktime ../include ../../kernel/gen_messaging ../yafray ../blenloader + ../freestyle ) IF(WITH_OPENEXR) diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index a93b66352e6..f3f380f599b 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1630,14 +1630,13 @@ static void do_render_3d(Render *re) else RE_Database_FromScene(re, re->scene, 1); - threaded_tile_processor(re); - /* Freestyle */ if( re->r.mode & R_EDGE_FRS ) { FRS_prepare(re); - FRS_execute(re,1); } + threaded_tile_processor(re); + /* do left-over 3d post effects (flares) */ if(re->flag & R_HALO) if(!re->test_break()) @@ -2201,8 +2200,6 @@ static void do_render_composite_fields_blur_3d(Render *re) static void freestyleRender(Render *re) { - float mat[4][4]; - // init render result RE_FreeRenderResult(re->result); re->result = new_render_result(re, &re->disprect, 0, RR_USEMEM); @@ -2215,13 +2212,16 @@ static void freestyleRender(Render *re) RE_Database_FromScene_Vectors(re, re->scene); else RE_Database_FromScene(re, re->scene, 1); - + + // used to reobtain ogl context after RE_Database_FromScene call + re->display_clear(re->result); + // Freestyle initialization FRS_prepare(re); // run Freestyle re->i.starttime = PIL_check_seconds_timer(); - FRS_execute(re, 0); + FRS_render_GL(re); re->i.lastframetime = PIL_check_seconds_timer()- re->i.starttime; re->stats_draw(&re->i); diff --git a/source/blender/src/CMakeLists.txt b/source/blender/src/CMakeLists.txt index d95551940f8..fc77ae69451 100644 --- a/source/blender/src/CMakeLists.txt +++ b/source/blender/src/CMakeLists.txt @@ -35,7 +35,7 @@ SET(INC ../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue ../quicktime ../../../intern/elbeem/extern ../../../intern/ghost ../../../intern/opennl/extern - ../nodes ../../../extern/glew/include ../gpu + ../nodes ../../../extern/glew/include ../gpu ../freestyle ${PYTHON_INC} ${SDL_INC} ) |