diff options
author | Maxime Curioni <maxime.curioni@gmail.com> | 2008-05-29 04:27:09 +0400 |
---|---|---|
committer | Maxime Curioni <maxime.curioni@gmail.com> | 2008-05-29 04:27:09 +0400 |
commit | 9a6302e10994e45a2ec8a419bda5e1735c8e0799 (patch) | |
tree | c674c4917926e60f99968ca746aa2719ccc8c359 /source/blender/freestyle/intern/app_blender | |
parent | 9986b5cd736a493026c9580a49bbf030cd1fa4be (diff) |
soc-2008-mxcurioni: First render ! It should render the teapot upside down on a black background. The correction was made by following Yafray's rendering and display implementation, which is very clear.
Diffstat (limited to 'source/blender/freestyle/intern/app_blender')
-rw-r--r-- | source/blender/freestyle/intern/app_blender/api.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/source/blender/freestyle/intern/app_blender/api.cpp b/source/blender/freestyle/intern/app_blender/api.cpp index eb29580f891..d842e59d31b 100644 --- a/source/blender/freestyle/intern/app_blender/api.cpp +++ b/source/blender/freestyle/intern/app_blender/api.cpp @@ -6,13 +6,26 @@ #include <iostream> +#ifdef __cplusplus +extern "C" { +#endif + +#include "render_types.h" +//#include "renderdatabase.h" +/* display_draw() needs render layer info */ +#include "renderpipeline.h" + +#ifdef __cplusplus +} +#endif + using namespace std; #ifdef __cplusplus extern "C" { #endif - void FRS_execute() { + void FRS_execute(Render* re) { cout << "Freestyle start" << endl; Config::Path pathconfig; @@ -20,16 +33,39 @@ extern "C" { AppGLWidget *view = new AppGLWidget; c->SetView(view); - view->setWidth(640); - view->setHeight(640); + unsigned int width = re->winx; + unsigned int height = re->winy; + view->setWidth(width); + view->setHeight(height); c->Load3DSFile( TEST_3DS_FILE ); c->InsertStyleModule( 0, TEST_STYLE_MODULE_FILE ); c->toggleLayer(0, true); c->ComputeViewMap(); - + c->DrawStrokes(); + + RenderResult rres; + RE_GetResultImage(re, &rres); + float *rgb = new float[3*width*height]; + view->readPixels(0,0,width,height,AppGLWidget::RGB, rgb); + + for (unsigned short y=0; y<height; y++) { + float* bpt = (float*)rres.rectf + ((y*width) << 2); + for (unsigned short x=0; x<width; x++) { + float *pos = rgb + 3 * ( y*width + x ); + + bpt[0] = pos[0]; // r + bpt[1] = pos[1]; // g + bpt[2] = pos[2]; // b + bpt[3] = 1.0; // a + bpt += 4; + } + } + + re->result->renlay = render_get_active_layer(re, re->result); + re->display_draw(re->result, NULL); cout << "Freestyle end" << endl; |