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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 18:34:26 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 18:46:11 +0300
commit15bae8ac0050a50904ac4f90e85e4463463b3c5d (patch)
tree7bf58999cb513c4c6099862fd6314a451f07a105 /source/blender
parent820d1b249df239b8ec1161ea3fb3f99fb62c9f49 (diff)
Fix T60095: freestyle not rendering animated camera correctly.
Replace legacy view matrix access with same one used by Eevee.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp8
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h1
-rw-r--r--source/blender/render/intern/include/render_types.h2
-rw-r--r--source/blender/render/intern/source/pipeline.c34
4 files changed, 7 insertions, 38 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 4d77962bdfa..14f524199a2 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -408,9 +408,15 @@ void BlenderFileLoader::insertShapeNode(Object *ob, Mesh *me, int id)
FreestyleEdge *fed = (FreestyleEdge*)CustomData_get_layer(&me->edata, CD_FREESTYLE_EDGE);
FreestyleFace *ffa = (FreestyleFace*)CustomData_get_layer(&me->pdata, CD_FREESTYLE_FACE);
+ // Compute view matrix
+ Object *ob_camera_eval = DEG_get_evaluated_object(_depsgraph, RE_GetCamera(_re));
+ float viewinv[4][4], viewmat[4][4];
+ RE_GetCameraModelMatrix(_re, ob_camera_eval, viewinv);
+ invert_m4_m4(viewmat, viewinv);
+
// Compute matrix including camera transform
float obmat[4][4], nmat[4][4];
- mul_m4_m4m4(obmat, _re->viewmat, ob->obmat);
+ mul_m4_m4m4(obmat, viewmat, ob->obmat);
invert_m4_m4(nmat, obmat);
transpose_m4(nmat);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index be7bf4f454b..bde767dc99e 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -257,7 +257,6 @@ void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float
void RE_SetView(struct Render *re, float mat[4][4]);
/* get current view and window transform */
-void RE_GetView(struct Render *re, float mat[4][4]);
void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
/* set the render threads based on the commandline and autothreads setting */
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 0f42fff94fe..e5689dfff74 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -103,8 +103,6 @@ struct Render {
int partx, party;
/* Camera transform, only used by Freestyle. */
- float viewmat[4][4], viewinv[4][4];
- float viewmat_orig[4][4]; /* for incremental render */
float winmat[4][4];
/* clippping */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 8b815539d22..6e6bbe6332d 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -966,13 +966,6 @@ void RE_SetOrtho(Render *re, const rctf *viewplane, float clipsta, float clipend
re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend);
}
-void RE_SetView(Render *re, float mat[4][4])
-{
- /* re->ok flag? */
- copy_m4_m4(re->viewmat, mat);
- invert_m4_m4(re->viewinv, re->viewmat);
-}
-
void RE_GetViewPlane(Render *re, rctf *r_viewplane, rcti *r_disprect)
{
*r_viewplane = re->viewplane;
@@ -986,11 +979,6 @@ void RE_GetViewPlane(Render *re, rctf *r_viewplane, rcti *r_disprect)
}
}
-void RE_GetView(Render *re, float mat[4][4])
-{
- copy_m4_m4(mat, re->viewmat);
-}
-
/* image and movie output has to move to either imbuf or kernel */
void RE_display_init_cb(Render *re, void *handle, void (*f)(void *handle, RenderResult *rr))
{
@@ -2055,28 +2043,6 @@ void RE_RenderFreestyleExternal(Render *re)
for (rv = re->result->views.first; rv; rv = rv->next) {
RE_SetActiveRenderView(re, rv->name);
-
- /* scene needs to be set to get camera */
- Object *camera = RE_GetCamera(re);
-
- /* if no camera, viewmat should have been set! */
- if (camera) {
- /* called before but need to call again in case of lens animation from the
- * above call to BKE_scene_graph_update_for_newframe, fixes bug. [#22702].
- * following calls don't depend on 'RE_SetCamera' */
- float mat[4][4];
-
- RE_SetCamera(re, camera);
- RE_GetCameraModelMatrix(re, camera, mat);
- invert_m4(mat);
- RE_SetView(re, mat);
-
- /* force correct matrix for scaled cameras */
- DEG_id_tag_update_ex(re->main, &camera->id, ID_RECALC_TRANSFORM);
- }
-
- printf("add freestyle\n");
-
add_freestyle(re, 1);
}
}