Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Curioni <maxime.curioni@gmail.com>2008-10-01 19:03:35 +0400
committerMaxime Curioni <maxime.curioni@gmail.com>2008-10-01 19:03:35 +0400
commit06d2d97605381db00a212ccc6df09ca250b496d6 (patch)
tree197beed4a7c133054676fe0f4385139878b35fdf /source/blender/freestyle
parent204f48c74e3a6f8a940aefea07f42e2a160d4171 (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/freestyle')
-rw-r--r--source/blender/freestyle/FRS_freestyle.h2
-rw-r--r--source/blender/freestyle/intern/app_blender/api.cpp103
2 files changed, 23 insertions, 82 deletions
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();
}