diff options
author | Maxime Curioni <maxime.curioni@gmail.com> | 2008-07-09 02:55:00 +0400 |
---|---|---|
committer | Maxime Curioni <maxime.curioni@gmail.com> | 2008-07-09 02:55:00 +0400 |
commit | f7f0077294b727b673671af32a0fd9f86dbe353b (patch) | |
tree | 0ef90fa5b0e0ad71c2a55d18e55f792a5bc4da99 /source/blender/freestyle/intern/app_blender | |
parent | 270184e1b2e98a00d9e7f5598084fe65943bf925 (diff) |
soc-2008-mxcurioni: first (blank) file upload for SWIG removal, in source/blender/freestyle/intern/python. The migration will be based on source/blender/freestyle/intern/swig/ModuleWrapper.{cpp,h}
Diffstat (limited to 'source/blender/freestyle/intern/app_blender')
-rw-r--r-- | source/blender/freestyle/intern/app_blender/api.cpp | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/source/blender/freestyle/intern/app_blender/api.cpp b/source/blender/freestyle/intern/app_blender/api.cpp index 36dac821898..2395df646f0 100644 --- a/source/blender/freestyle/intern/app_blender/api.cpp +++ b/source/blender/freestyle/intern/app_blender/api.cpp @@ -106,11 +106,12 @@ extern "C" { void FRS_render(Render* re, int render_in_layer) { - if(render_in_layer) { - view->workingBuffer = GL_COLOR_ATTACHMENT0_EXT; - } else { - view->workingBuffer = GL_BACK; - } + // if(render_in_layer) { + // view->workingBuffer = GL_COLOR_ATTACHMENT0_EXT; + // } else { + // view->workingBuffer = GL_BACK; + // } + view->workingBuffer = GL_BACK; // add style module string style_module = pathconfig->getProjectDir() + @@ -134,8 +135,12 @@ extern "C" { GLuint framebuffer, renderbuffers[2]; GLenum status; RenderLayer *rl; + GLubyte *pixc; if(render_in_layer) { + + pixc = (GLubyte *) malloc( 4 * re->winx * re->winy * sizeof(GLubyte) ); + cout << "Freestyle as a render layer - SETUP" << endl; // set up frame buffer @@ -146,7 +151,7 @@ extern "C" { glGenRenderbuffersEXT(2, renderbuffers); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffers[0]); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, re->winx, re->winy); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA, re->winx, re->winy); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, renderbuffers[0]); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffers[1]); @@ -163,38 +168,51 @@ extern "C" { return; } - glPushAttrib(GL_VIEWPORT_BIT); + glPushAttrib(GL_VIEWPORT_BIT); + glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); // should not be needed glViewport(0, 0, re->winx, re->winy); - glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); // really needed ? - } - - FRS_render(re, render_in_layer); - - if(render_in_layer) { - for(rl = (RenderLayer *)re->result->layers.first; rl; rl= rl->next) { - if(rl->layflag & SCE_LAY_FRS) { - cout << "Freestyle as a render layer - RESULT" << endl; - - // transfer render to layer - glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); - glReadPixels(0, 0, re->winx, re->winy, GL_RGBA, GL_FLOAT, rl->rectf ); - - // bind window - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - glDrawBuffer(GL_BACK); - glPopAttrib(); - glDeleteRenderbuffersEXT(2, renderbuffers); - glDeleteFramebuffersEXT(1, &framebuffer); + + FRS_render(re, render_in_layer); + + // keep first Freestyle layer + for(rl = (RenderLayer *)re->result->layers.first; rl; rl= rl->next) + if(rl->layflag & SCE_LAY_FRS) + break; + + cout << "Freestyle as a render layer - RESULT" << endl; + + // transfer render to layer + glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); + glReadPixels(0, 0, re->winx, re->winy, GL_RGBA, GL_UNSIGNED_BYTE, pixc ); + + int p; + for(int i = 0; i < re->winx; i++) { + for(int j = 0; j < re->winy; j++){ + p = 4*(i*re->winy + j); + *(rl->rectf + p ) = 1.0*pixc[ p ]/255.0; + *(rl->rectf + p + 1) = 1.0*pixc[ p+1 ]/255.0; + *(rl->rectf + p + 2) = 1.0*pixc[ p+2 ]/255.0; + *(rl->rectf + p + 3) = 1.0*pixc[ p+3 ]/255.0; } } + + // bind window + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + glDrawBuffer(GL_BACK); + glPopAttrib(); + glDeleteRenderbuffersEXT(2, renderbuffers); + glDeleteFramebuffersEXT(1, &framebuffer); + } else { - // copy result into render window + FRS_render(re, render_in_layer); + 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(); } |