Differential D2927 Diff 9587 source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
| Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : StrokeRenderer() | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| printf("%s: %d thread(s)\n", __func__, BKE_render_num_threads(&freestyle_scene->r)); | printf("%s: %d thread(s)\n", __func__, BKE_render_num_threads(&freestyle_scene->r)); | ||||
| } | } | ||||
| BKE_scene_set_background(freestyle_bmain, freestyle_scene); | BKE_scene_set_background(freestyle_bmain, freestyle_scene); | ||||
| DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &freestyle_scene->id, 0); | DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &freestyle_scene->id, 0); | ||||
| // Scene layer. | // Scene layer. | ||||
| SceneLayer *scene_layer = (SceneLayer *)freestyle_scene->render_layers.first; | ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first; | ||||
| scene_layer->layflag = SCE_LAY_SOLID | SCE_LAY_ZTRA; | view_layer->layflag = SCE_LAY_SOLID | SCE_LAY_ZTRA; | ||||
| // Camera | // Camera | ||||
| Object *object_camera = BKE_object_add(freestyle_bmain, freestyle_scene, scene_layer, OB_CAMERA, NULL); | Object *object_camera = BKE_object_add(freestyle_bmain, freestyle_scene, view_layer, OB_CAMERA, NULL); | ||||
| DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &object_camera->id, 0); | DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &object_camera->id, 0); | ||||
| Camera *camera = (Camera *)object_camera->data; | Camera *camera = (Camera *)object_camera->data; | ||||
| camera->type = CAM_ORTHO; | camera->type = CAM_ORTHO; | ||||
| camera->ortho_scale = max(re->rectx, re->recty); | camera->ortho_scale = max(re->rectx, re->recty); | ||||
| camera->clipsta = 0.1f; | camera->clipsta = 0.1f; | ||||
| camera->clipend = 100.0f; | camera->clipend = 100.0f; | ||||
| Show All 25 Lines | |||||
| BlenderStrokeRenderer::~BlenderStrokeRenderer() | BlenderStrokeRenderer::~BlenderStrokeRenderer() | ||||
| { | { | ||||
| // The freestyle_scene object is not released here. Instead, | // The freestyle_scene object is not released here. Instead, | ||||
| // the scene is released in free_all_freestyle_renders() in | // the scene is released in free_all_freestyle_renders() in | ||||
| // source/blender/render/intern/source/pipeline.c, after the | // source/blender/render/intern/source/pipeline.c, after the | ||||
| // compositor has finished. | // compositor has finished. | ||||
| // release objects and data blocks | // release objects and data blocks | ||||
| SceneLayer *scene_layer = (SceneLayer *)freestyle_scene->render_layers.first; | ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first; | ||||
| for (Base *b = (Base *)scene_layer->object_bases.first; b; b = b->next) { | for (Base *b = (Base *)view_layer->object_bases.first; b; b = b->next) { | ||||
| Object *ob = b->object; | Object *ob = b->object; | ||||
| void *data = ob->data; | void *data = ob->data; | ||||
| char *name = ob->id.name; | char *name = ob->id.name; | ||||
| #if 0 | #if 0 | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "removing " << name[0] << name[1] << ":" << (name+2) << endl; | cout << "removing " << name[0] << name[1] << ":" << (name+2) << endl; | ||||
| } | } | ||||
| #endif | #endif | ||||
| Show All 13 Lines | #endif | ||||
| } | } | ||||
| // Make sure we don't have any bases which might reference freed objects. | // Make sure we don't have any bases which might reference freed objects. | ||||
| FOREACH_SCENE_COLLECTION(freestyle_scene, sc) | FOREACH_SCENE_COLLECTION(freestyle_scene, sc) | ||||
| { | { | ||||
| BLI_freelistN(&sc->objects); | BLI_freelistN(&sc->objects); | ||||
| } | } | ||||
| FOREACH_SCENE_COLLECTION_END | FOREACH_SCENE_COLLECTION_END | ||||
| BLI_freelistN(&scene_layer->object_bases); | BLI_freelistN(&view_layer->object_bases); | ||||
| // release materials | // release materials | ||||
| Link *lnk = (Link *)freestyle_bmain->mat.first; | Link *lnk = (Link *)freestyle_bmain->mat.first; | ||||
| while (lnk) | while (lnk) | ||||
| { | { | ||||
| Material *ma = (Material*)lnk; | Material *ma = (Material*)lnk; | ||||
| // We want to retain the linestyle mtexs, so let's detach them first | // We want to retain the linestyle mtexs, so let's detach them first | ||||
| ▲ Show 20 Lines • Show All 470 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| return strokeGroups.size() + texturedStrokeGroups.size(); | return strokeGroups.size() + texturedStrokeGroups.size(); | ||||
| } | } | ||||
| // Build a mesh object representing a group of stylized strokes | // Build a mesh object representing a group of stylized strokes | ||||
| void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex) | void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex) | ||||
| { | { | ||||
| #if 0 | #if 0 | ||||
| Object *object_mesh = BKE_object_add(freestyle_bmain, freestyle_scene, (SceneLayer *)freestyle_scene->render_layers.first, OB_MESH); | Object *object_mesh = BKE_object_add(freestyle_bmain, freestyle_scene, (ViewLayer *)freestyle_scene->view_layers.first, OB_MESH); | ||||
| DEG_relations_tag_update(freestyle_bmain); | DEG_relations_tag_update(freestyle_bmain); | ||||
| #else | #else | ||||
| Object *object_mesh = NewMesh(); | Object *object_mesh = NewMesh(); | ||||
| #endif | #endif | ||||
| Mesh *mesh = (Mesh *)object_mesh->data; | Mesh *mesh = (Mesh *)object_mesh->data; | ||||
| mesh->totvert = group->totvert; | mesh->totvert = group->totvert; | ||||
| mesh->totedge = group->totedge; | mesh->totedge = group->totedge; | ||||
| ▲ Show 20 Lines • Show All 260 Lines • ▼ Show 20 Lines | if (camera->clipend < _z) | ||||
| camera->clipend = _z + _z_delta * 100.0f; | camera->clipend = _z + _z_delta * 100.0f; | ||||
| #if 0 | #if 0 | ||||
| if (G.debug & G_DEBUG_FREESTYLE) { | if (G.debug & G_DEBUG_FREESTYLE) { | ||||
| cout << "clipsta " << camera->clipsta << ", clipend " << camera->clipend << endl; | cout << "clipsta " << camera->clipsta << ", clipend " << camera->clipend << endl; | ||||
| } | } | ||||
| #endif | #endif | ||||
| Render *freestyle_render = RE_NewSceneRender(freestyle_scene); | Render *freestyle_render = RE_NewSceneRender(freestyle_scene); | ||||
| SceneLayer *scene_layer = (SceneLayer *)freestyle_scene->render_layers.first; | ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first; | ||||
| DEG_graph_relations_update(freestyle_depsgraph, freestyle_bmain, freestyle_scene, scene_layer); | DEG_graph_relations_update(freestyle_depsgraph, freestyle_bmain, freestyle_scene, view_layer); | ||||
| freestyle_render->depsgraph = freestyle_depsgraph; | freestyle_render->depsgraph = freestyle_depsgraph; | ||||
| RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene, | RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene, | ||||
| render && get_stroke_count() > 0); | render && get_stroke_count() > 0); | ||||
| return freestyle_render; | return freestyle_render; | ||||
| } | } | ||||
| } /* namespace Freestyle */ | } /* namespace Freestyle */ | ||||