Changeset View
Changeset View
Standalone View
Standalone View
source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
| Show First 20 Lines • Show All 277 Lines • ▼ Show 20 Lines | else { | ||||
| return true; | return true; | ||||
| if (num_non_target_positive_conditions > 0) | if (num_non_target_positive_conditions > 0) | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| static void prepare(Render *re, SceneLayer *scene_layer) | static void prepare(Render *re, ViewLayer *view_layer) | ||||
| { | { | ||||
| // load mesh | // load mesh | ||||
| re->i.infostr = IFACE_("Freestyle: Mesh loading"); | re->i.infostr = IFACE_("Freestyle: Mesh loading"); | ||||
| re->stats_draw(re->sdh, &re->i); | re->stats_draw(re->sdh, &re->i); | ||||
| re->i.infostr = NULL; | re->i.infostr = NULL; | ||||
| if (controller->LoadMesh(re, scene_layer)) // returns if scene cannot be loaded or if empty | if (controller->LoadMesh(re, view_layer)) // returns if scene cannot be loaded or if empty | ||||
| return; | return; | ||||
| if (re->test_break(re->tbh)) | if (re->test_break(re->tbh)) | ||||
| return; | return; | ||||
| // add style modules | // add style modules | ||||
| FreestyleConfig *config = &scene_layer->freestyle_config; | FreestyleConfig *config = &view_layer->freestyle_config; | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "\n=== Rendering options ===" << endl; | cout << "\n=== Rendering options ===" << endl; | ||||
| } | } | ||||
| int layer_count = 0; | int layer_count = 0; | ||||
| switch (config->mode) { | switch (config->mode) { | ||||
| case FREESTYLE_CONTROL_SCRIPT_MODE: | case FREESTYLE_CONTROL_SCRIPT_MODE: | ||||
| ▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | for (FreestyleLineSet *lineset = (FreestyleLineSet *)config->linesets.first; | ||||
| lineset; | lineset; | ||||
| lineset = lineset->next) | lineset = lineset->next) | ||||
| { | { | ||||
| if (lineset->flags & FREESTYLE_LINESET_ENABLED) { | if (lineset->flags & FREESTYLE_LINESET_ENABLED) { | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << " " << layer_count+1 << ": " << lineset->name << " - " << | cout << " " << layer_count+1 << ": " << lineset->name << " - " << | ||||
| (lineset->linestyle ? (lineset->linestyle->id.name + 2) : "<NULL>") << endl; | (lineset->linestyle ? (lineset->linestyle->id.name + 2) : "<NULL>") << endl; | ||||
| } | } | ||||
| char *buffer = create_lineset_handler(scene_layer->name, lineset->name); | char *buffer = create_lineset_handler(view_layer->name, lineset->name); | ||||
| controller->InsertStyleModule(layer_count, lineset->name, buffer); | controller->InsertStyleModule(layer_count, lineset->name, buffer); | ||||
| controller->toggleLayer(layer_count, true); | controller->toggleLayer(layer_count, true); | ||||
| MEM_freeN(buffer); | MEM_freeN(buffer); | ||||
| if (!(lineset->selection & FREESTYLE_SEL_EDGE_TYPES) || !lineset->edge_types) { | if (!(lineset->selection & FREESTYLE_SEL_EDGE_TYPES) || !lineset->edge_types) { | ||||
| ++use_ridges_and_valleys; | ++use_ridges_and_valleys; | ||||
| ++use_suggestive_contours; | ++use_suggestive_contours; | ||||
| ++use_material_boundaries; | ++use_material_boundaries; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "Suggestive contour Kr derivative epsilon : " << | cout << "Suggestive contour Kr derivative epsilon : " << | ||||
| controller->getSuggestiveContourKrDerivativeEpsilon() << endl; | controller->getSuggestiveContourKrDerivativeEpsilon() << endl; | ||||
| cout << "Material boundaries : " << | cout << "Material boundaries : " << | ||||
| (controller->getComputeMaterialBoundariesFlag() ? "enabled" : "disabled") << endl; | (controller->getComputeMaterialBoundariesFlag() ? "enabled" : "disabled") << endl; | ||||
| cout << endl; | cout << endl; | ||||
| } | } | ||||
| // set diffuse and z depth passes | // set diffuse and z depth passes | ||||
| RenderLayer *rl = RE_GetRenderLayer(re->result, scene_layer->name); | RenderLayer *rl = RE_GetRenderLayer(re->result, view_layer->name); | ||||
| bool diffuse = false, z = false; | bool diffuse = false, z = false; | ||||
| for (RenderPass *rpass = (RenderPass *)rl->passes.first; rpass; rpass = rpass->next) { | for (RenderPass *rpass = (RenderPass *)rl->passes.first; rpass; rpass = rpass->next) { | ||||
| if (STREQ(rpass->name, RE_PASSNAME_DIFFUSE)) { | if (STREQ(rpass->name, RE_PASSNAME_DIFFUSE)) { | ||||
| controller->setPassDiffuse(rpass->rect, rpass->rectx, rpass->recty); | controller->setPassDiffuse(rpass->rect, rpass->rectx, rpass->recty); | ||||
| diffuse = true; | diffuse = true; | ||||
| } | } | ||||
| if (STREQ(rpass->name, RE_PASSNAME_Z)) { | if (STREQ(rpass->name, RE_PASSNAME_Z)) { | ||||
| controller->setPassZ(rpass->rect, rpass->rectx, rpass->recty); | controller->setPassZ(rpass->rect, rpass->rectx, rpass->recty); | ||||
| Show All 11 Lines | static void prepare(Render *re, ViewLayer *view_layer) | ||||
| // compute view map | // compute view map | ||||
| re->i.infostr = IFACE_("Freestyle: View map creation"); | re->i.infostr = IFACE_("Freestyle: View map creation"); | ||||
| re->stats_draw(re->sdh, &re->i); | re->stats_draw(re->sdh, &re->i); | ||||
| re->i.infostr = NULL; | re->i.infostr = NULL; | ||||
| controller->ComputeViewMap(); | controller->ComputeViewMap(); | ||||
| } | } | ||||
| void FRS_composite_result(Render *re, SceneLayer *scene_layer, Render *freestyle_render) | void FRS_composite_result(Render *re, ViewLayer *view_layer, Render *freestyle_render) | ||||
| { | { | ||||
| RenderLayer *rl; | RenderLayer *rl; | ||||
| float *src, *dest, *pixSrc, *pixDest; | float *src, *dest, *pixSrc, *pixDest; | ||||
| int x, y, rectx, recty; | int x, y, rectx, recty; | ||||
| if (freestyle_render == NULL || freestyle_render->result == NULL) | if (freestyle_render == NULL || freestyle_render->result == NULL) | ||||
| return; | return; | ||||
| Show All 13 Lines | if (!src) { | ||||
| return; | return; | ||||
| } | } | ||||
| #if 0 | #if 0 | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "src: " << rl->rectx << " x " << rl->recty << endl; | cout << "src: " << rl->rectx << " x " << rl->recty << endl; | ||||
| } | } | ||||
| #endif | #endif | ||||
| rl = RE_GetRenderLayer(re->result, scene_layer->name); | rl = RE_GetRenderLayer(re->result, view_layer->name); | ||||
| if (!rl) { | if (!rl) { | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "No destination render layer to composite to" << endl; | cout << "No destination render layer to composite to" << endl; | ||||
| } | } | ||||
| return; | return; | ||||
| } | } | ||||
| dest = RE_RenderLayerGetPass(rl, RE_PASSNAME_COMBINED, re->viewname); | dest = RE_RenderLayerGetPass(rl, RE_PASSNAME_COMBINED, re->viewname); | ||||
| if (!dest) { | if (!dest) { | ||||
| Show All 16 Lines | for (x = 0; x < rectx; x++) { | ||||
| if (pixSrc[3] > 0.0) { | if (pixSrc[3] > 0.0) { | ||||
| pixDest = dest + 4 * (rectx * y + x); | pixDest = dest + 4 * (rectx * y + x); | ||||
| addAlphaOverFloat(pixDest, pixSrc); | addAlphaOverFloat(pixDest, pixSrc); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static int displayed_layer_count(SceneLayer *scene_layer) | static int displayed_layer_count(ViewLayer *view_layer) | ||||
| { | { | ||||
| int count = 0; | int count = 0; | ||||
| switch (scene_layer->freestyle_config.mode) { | switch (view_layer->freestyle_config.mode) { | ||||
| case FREESTYLE_CONTROL_SCRIPT_MODE: | case FREESTYLE_CONTROL_SCRIPT_MODE: | ||||
| for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)scene_layer->freestyle_config.modules.first; | for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first; | ||||
| module; | module; | ||||
| module = module->next) | module = module->next) | ||||
| { | { | ||||
| if (module->script && module->is_displayed) | if (module->script && module->is_displayed) | ||||
| count++; | count++; | ||||
| } | } | ||||
| break; | break; | ||||
| case FREESTYLE_CONTROL_EDITOR_MODE: | case FREESTYLE_CONTROL_EDITOR_MODE: | ||||
| for (FreestyleLineSet *lineset = (FreestyleLineSet *)scene_layer->freestyle_config.linesets.first; | for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first; | ||||
| lineset; | lineset; | ||||
| lineset = lineset->next) | lineset = lineset->next) | ||||
| { | { | ||||
| if (lineset->flags & FREESTYLE_LINESET_ENABLED) | if (lineset->flags & FREESTYLE_LINESET_ENABLED) | ||||
| count++; | count++; | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| return count; | return count; | ||||
| } | } | ||||
| int FRS_is_freestyle_enabled(SceneLayer *scene_layer) | int FRS_is_freestyle_enabled(ViewLayer *view_layer) | ||||
| { | { | ||||
| return ((scene_layer->flag & SCENE_LAYER_RENDER) && | return ((view_layer->flag & VIEW_LAYER_RENDER) && | ||||
| (scene_layer->flag & SCENE_LAYER_FREESTYLE) && | (view_layer->flag & VIEW_LAYER_FREESTYLE) && | ||||
| displayed_layer_count(scene_layer) > 0); | displayed_layer_count(view_layer) > 0); | ||||
| } | } | ||||
| void FRS_init_stroke_renderer(Render *re) | void FRS_init_stroke_renderer(Render *re) | ||||
| { | { | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << endl; | cout << endl; | ||||
| cout << "#===============================================================" << endl; | cout << "#===============================================================" << endl; | ||||
| cout << "# Freestyle" << endl; | cout << "# Freestyle" << endl; | ||||
| cout << "#===============================================================" << endl; | cout << "#===============================================================" << endl; | ||||
| } | } | ||||
| init_view(re); | init_view(re); | ||||
| controller->ResetRenderCount(); | controller->ResetRenderCount(); | ||||
| } | } | ||||
| void FRS_begin_stroke_rendering(Render *re) | void FRS_begin_stroke_rendering(Render *re) | ||||
| { | { | ||||
| init_camera(re); | init_camera(re); | ||||
| } | } | ||||
| Render *FRS_do_stroke_rendering(Render *re, SceneLayer *scene_layer, int render) | Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render) | ||||
| { | { | ||||
| Render *freestyle_render = NULL; | Render *freestyle_render = NULL; | ||||
| if (!render) | if (!render) | ||||
| return controller->RenderStrokes(re, false); | return controller->RenderStrokes(re, false); | ||||
| RenderMonitor monitor(re); | RenderMonitor monitor(re); | ||||
| controller->setRenderMonitor(&monitor); | controller->setRenderMonitor(&monitor); | ||||
| controller->setViewMapCache((scene_layer->freestyle_config.flags & FREESTYLE_VIEW_MAP_CACHE) ? true : false); | controller->setViewMapCache((view_layer->freestyle_config.flags & FREESTYLE_VIEW_MAP_CACHE) ? true : false); | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << endl; | cout << endl; | ||||
| cout << "----------------------------------------------------------" << endl; | cout << "----------------------------------------------------------" << endl; | ||||
| cout << "| " << (re->scene->id.name + 2) << "|" << scene_layer->name << endl; | cout << "| " << (re->scene->id.name + 2) << "|" << view_layer->name << endl; | ||||
| cout << "----------------------------------------------------------" << endl; | cout << "----------------------------------------------------------" << endl; | ||||
| } | } | ||||
| // prepare Freestyle: | // prepare Freestyle: | ||||
| // - load mesh | // - load mesh | ||||
| // - add style modules | // - add style modules | ||||
| // - set parameters | // - set parameters | ||||
| // - compute view map | // - compute view map | ||||
| prepare(re, scene_layer); | prepare(re, view_layer); | ||||
| if (re->test_break(re->tbh)) { | if (re->test_break(re->tbh)) { | ||||
| controller->CloseFile(); | controller->CloseFile(); | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "Break" << endl; | cout << "Break" << endl; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| // render and composite Freestyle result | // render and composite Freestyle result | ||||
| if (controller->_ViewMap) { | if (controller->_ViewMap) { | ||||
| // render strokes | // render strokes | ||||
| re->i.infostr = IFACE_("Freestyle: Stroke rendering"); | re->i.infostr = IFACE_("Freestyle: Stroke rendering"); | ||||
| re->stats_draw(re->sdh, &re->i); | re->stats_draw(re->sdh, &re->i); | ||||
| re->i.infostr = NULL; | re->i.infostr = NULL; | ||||
| g_freestyle.scene = re->scene; | g_freestyle.scene = re->scene; | ||||
| int strokeCount = controller->DrawStrokes(); | int strokeCount = controller->DrawStrokes(); | ||||
| if (strokeCount > 0) { | if (strokeCount > 0) { | ||||
| freestyle_render = controller->RenderStrokes(re, true); | freestyle_render = controller->RenderStrokes(re, true); | ||||
| } | } | ||||
| controller->CloseFile(); | controller->CloseFile(); | ||||
| g_freestyle.scene = NULL; | g_freestyle.scene = NULL; | ||||
| // composite result | // composite result | ||||
| if (freestyle_render) { | if (freestyle_render) { | ||||
| FRS_composite_result(re, scene_layer, freestyle_render); | FRS_composite_result(re, view_layer, freestyle_render); | ||||
| RE_FreeRenderResult(freestyle_render->result); | RE_FreeRenderResult(freestyle_render->result); | ||||
| freestyle_render->result = NULL; | freestyle_render->result = NULL; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return freestyle_render; | return freestyle_render; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 105 Lines • Show Last 20 Lines | |||||