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:
-rw-r--r--source/blender/freestyle/FRS_freestyle.h (renamed from source/blender/freestyle/FST_freestyle.h)3
-rw-r--r--source/blender/freestyle/intern/app_blender/api.cpp67
-rw-r--r--source/blender/makesdna/DNA_scene_types.h2
-rw-r--r--source/blender/python/api2_2x/sceneRender.c4
-rw-r--r--source/blender/render/intern/source/pipeline.c20
-rw-r--r--source/blender/src/buttons_scene.c9
6 files changed, 74 insertions, 31 deletions
diff --git a/source/blender/freestyle/FST_freestyle.h b/source/blender/freestyle/FRS_freestyle.h
index 1f516078258..060ccf6961a 100644
--- a/source/blender/freestyle/FST_freestyle.h
+++ b/source/blender/freestyle/FRS_freestyle.h
@@ -5,7 +5,8 @@
extern "C" {
#endif
- void FRS_execute(Render* re);
+ void FRS_prepare(Render* re);
+ void FRS_execute(Render* re, int render_in_layer);
#ifdef __cplusplus
}
diff --git a/source/blender/freestyle/intern/app_blender/api.cpp b/source/blender/freestyle/intern/app_blender/api.cpp
index 96edf7fcdba..4ca13000ccb 100644
--- a/source/blender/freestyle/intern/app_blender/api.cpp
+++ b/source/blender/freestyle/intern/app_blender/api.cpp
@@ -27,11 +27,16 @@ using namespace std;
extern "C" {
#endif
+ static Config::Path *pathconfig = NULL;
static Controller *controller = NULL;
static AppGLWidget *view = NULL;
+
void FRS_initialize(){
+ if( pathconfig == NULL )
+ pathconfig = new Config::Path;
+
if( controller == NULL )
controller = new Controller;
@@ -41,20 +46,14 @@ extern "C" {
controller->SetView(view);
}
- void FRS_execute(Render* re) {
-
- // instanciation
- Config::Path pathconfig;
- FRS_initialize();
-
- // initialize view dimensions
- unsigned int width = re->winx;
- unsigned int height = re->winy;
- view->setWidth(width);
- view->setHeight(height);
- view->_camera->setScreenWidthAndHeight(width, height);
-
- // initialize camera
+
+ void FRS_init_view(Render* re){
+ view->setWidth( re->winx );
+ view->setHeight( re->winy );
+ view->_camera->setScreenWidthAndHeight( re->winx, re->winy);
+ }
+
+ void FRS_init_camera(Render* re){
Object* maincam_obj = re->scene->camera;
Camera *cam = (Camera*) maincam_obj->data;
@@ -62,22 +61,23 @@ extern "C" {
view->_camera->setType(AppGLWidget_Camera::PERSPECTIVE);
view->_camera->setHorizontalFieldOfView( M_PI / 180.0f * cam->angle );
}
- else if (cam->type == CAM_ORTHO){
- view->_camera->setType(AppGLWidget_Camera::ORTHOGRAPHIC);
- // view->_camera->setFocusDistance does not seem to work
- // integrate cam->ortho_scale parameter
- }
+ // else if (cam->type == CAM_ORTHO){
+ // view->_camera->setType(AppGLWidget_Camera::ORTHOGRAPHIC);
+ // // view->_camera->setFocusDistance does not seem to work
+ // // integrate cam->ortho_scale parameter
+ // }
Vec camPosition(maincam_obj->obmat[3][0], maincam_obj->obmat[3][1], maincam_obj->obmat[3][2]);
Vec camUp( re->viewmat[0][1], re->viewmat[1][1], re->viewmat[2][1]);
Vec camDirection( -re->viewmat[0][2], -re->viewmat[1][2], -re->viewmat[2][2]);
view->_camera->setPosition(camPosition);
view->_camera->setUpVector(camUp);
- view->_camera->setViewDirection(camDirection);
+ view->_camera->setViewDirection(camDirection);
+ }
-
+ void FRS_scene_3ds_export(Render* re) {
// export scene to 3ds format
- string script_3ds_export = pathconfig.getProjectDir() +
+ string script_3ds_export = pathconfig->getProjectDir() +
Config::DIR_SEP + "python" +
Config::DIR_SEP + "3ds_export.py";
BPY_run_python_script( const_cast<char *>(script_3ds_export.c_str()) );
@@ -94,9 +94,20 @@ extern "C" {
cout << "Cannot find" << exported_3ds_file << endl;
return;
}
+ }
+
+ void FRS_prepare(Render* re) {
+ FRS_initialize();
+
+ FRS_init_view(re);
+ FRS_init_camera(re);
+ FRS_scene_3ds_export(re);
+ }
+
+ void FRS_render(Render* re) {
// add style module
- string style_module = pathconfig.getProjectDir() +
+ string style_module = pathconfig->getProjectDir() +
Config::DIR_SEP + "style_modules" +
Config::DIR_SEP + "contour.py";
controller->InsertStyleModule( 0, const_cast<char *>(style_module.c_str()) );
@@ -114,12 +125,20 @@ extern "C" {
// copy result into render window
RenderResult rres;
RE_GetResultImage(re, &rres);
- view->readPixels(0,0,width,height,AppGLWidget::RGBA, rres.rectf );
+ 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();
}
+
+ void FRS_execute(Render* re, bool render_in_layer) {
+
+ //if(render_in_layer)
+ // set-up offscreen rendering
+
+ FRS_render(re);
+ }
#ifdef __cplusplus
}
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 59a7ee69527..0b224a24d4d 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -134,6 +134,7 @@ typedef struct SceneRenderLayer {
#define SCE_LAY_EDGE 8
#define SCE_LAY_SKY 16
#define SCE_LAY_STRAND 32
+#define SCE_LAY_FRS 64
/* flags between 32 and 0x8000 are set to 1 already, for future options */
#define SCE_LAY_ALL_Z 0x8000
@@ -571,6 +572,7 @@ typedef struct Scene {
#define R_ORTHO 0x0008
#define R_ENVMAP 0x0010
#define R_EDGE 0x0020
+#define R_EDGE_FRS 0x2000000 // will replace R_EDGE
#define R_FIELDS 0x0040
#define R_FIELDSTILL 0x0080
#define R_RADIO 0x0100
diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c
index 2174c435405..a6f35bf4d5d 100644
--- a/source/blender/python/api2_2x/sceneRender.c
+++ b/source/blender/python/api2_2x/sceneRender.c
@@ -3487,6 +3487,10 @@ static PyGetSetDef BPy_RenderLayer_getseters[] = {
(getter)RenderLayer_getLayflagBits, (setter)RenderLayer_setLayflagBits,
"Render Edge-enhance in this Layer (only works for Solid faces)",
(void *)SCE_LAY_EDGE},
+ {"enableFreestyle",
+ (getter)RenderLayer_getLayflagBits, (setter)RenderLayer_setLayflagBits,
+ "Render Freestyle in this Layer",
+ (void *)SCE_LAY_FRS},
{"enableSky",
(getter)RenderLayer_getLayflagBits, (setter)RenderLayer_setLayflagBits,
"Render Sky or backbuffer in this Layer",
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 5b2c7114fe3..8403d237f8f 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -70,7 +70,7 @@
#endif /* disable yafray */
-#include "FST_freestyle.h"
+#include "FRS_freestyle.h"
/* internal */
@@ -1621,7 +1621,7 @@ void RE_TileProcessor(Render *re, int firsttile, int threaded)
static void do_render_3d(Render *re)
{
-
+ RenderLayer *rl;
// re->cfra= cfra; /* <- unused! */
/* make render verts/faces/halos/lamps */
@@ -1632,6 +1632,17 @@ static void do_render_3d(Render *re)
threaded_tile_processor(re);
+ /* Freestyle */
+ if( re->r.mode & R_EDGE_FRS ) {
+ for(rl = re->result->layers.first; rl; rl= rl->next) {
+ if(rl->layflag & SCE_LAY_FRS) {
+ printf("Freestyle as a render layer\n");
+ FRS_prepare(re);
+ FRS_execute(re,1);
+ }
+ }
+ }
+
/* do left-over 3d post effects (flares) */
if(re->flag & R_HALO)
if(!re->test_break())
@@ -2208,9 +2219,12 @@ static void freestyleRender(Render *re)
Mat4Invert(mat, re->scene->camera->obmat);
RE_SetView(re, mat);
+ // Freestyle initialization
+ FRS_prepare(re);
+
// run Freestyle
re->i.starttime = PIL_check_seconds_timer();
- FRS_execute(re);
+ FRS_execute(re, 0);
re->i.lastframetime = PIL_check_seconds_timer()- re->i.starttime;
re->stats_draw(&re->i);
diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c
index 78b6abb5773..198f853393d 100644
--- a/source/blender/src/buttons_scene.c
+++ b/source/blender/src/buttons_scene.c
@@ -2108,7 +2108,8 @@ static void render_panel_output(void)
/* Toon shading buttons */
uiBlockBeginAlign(block);
uiDefButBitI(block, TOG, R_EDGE, B_NOP,"Edge", 115, 89, 60, 20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
- uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 175, 89, 135, 20, "Display Edge settings");
+ uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 175, 89, 75, 20, "Display Edge settings");
+ uiDefButBitI(block, TOG, R_EDGE_FRS, B_NOP,"Freestyle", 250, 89, 60, 20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Freestyle");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
@@ -3384,8 +3385,10 @@ static void render_panel_layers(void)
uiDefButBitI(block, TOG, SCE_LAY_HALO, B_NOP,"Halo", 95, 85, 40, 20, &srl->layflag, 0, 0, 0, 0, "Render Halos in this Layer (on top of Solid)");
uiDefButBitI(block, TOG, SCE_LAY_ZTRA, B_NOP,"Ztra", 135, 85, 40, 20, &srl->layflag, 0, 0, 0, 0, "Render Z-Transparent faces in this Layer (On top of Solid and Halos)");
uiDefButBitI(block, TOG, SCE_LAY_SKY, B_NOP,"Sky", 175, 85, 40, 20, &srl->layflag, 0, 0, 0, 0, "Render Sky or backbuffer in this Layer");
- uiDefButBitI(block, TOG, SCE_LAY_EDGE, B_NOP,"Edge", 215, 85, 45, 20, &srl->layflag, 0, 0, 0, 0, "Render Edge-enhance in this Layer (only works for Solid faces)");
- uiDefButBitI(block, TOG, SCE_LAY_STRAND, B_NOP,"Strand",260, 85, 50, 20, &srl->layflag, 0, 0, 0, 0, "Render Strands in this Layer");
+ uiDefButBitI(block, TOG, SCE_LAY_EDGE, B_NOP,"Edge", 215, 85, 25, 20, &srl->layflag, 0, 0, 0, 0, "Render Edge-enhance in this Layer (only works for Solid faces)");
+ uiDefButBitI(block, TOG, SCE_LAY_FRS, B_NOP,"FrSt", 240, 85, 30, 20, &srl->layflag, 0, 0, 0, 0, "Render Freestyle in this Layer");
+ uiDefButBitI(block, TOG, SCE_LAY_STRAND, B_NOP,"Strand",270, 85, 40, 20, &srl->layflag, 0, 0, 0, 0, "Render Strands in this Layer");
+
uiDefIDPoinBut(block, test_grouppoin_but, ID_GR, B_SET_PASS, "Light:", 50, 65, 130, 20, &(srl->light_override), "Name of Group to use as Lamps instead");
uiDefIDPoinBut(block, test_matpoin_but, ID_MA, B_SET_PASS, "Mat:", 180, 65, 130, 20, &(srl->mat_override), "Name of Material to use as Materials instead");