[Bf-blender-cvs] [51a60c9990b] greasepencil-object: Fix render pixel size
Antonio Vazquez
noreply at git.blender.org
Thu Feb 8 11:07:55 CET 2018
Commit: 51a60c9990bb52c72e20675a3d3a09288d647a95
Author: Antonio Vazquez
Date: Thu Feb 8 11:07:42 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB51a60c9990bb52c72e20675a3d3a09288d647a95
Fix render pixel size
The calculation must be equal to the viewport, because using the camera pixel size, the result is not correct.
===================================================================
M source/blender/draw/engines/gpencil/gpencil_engine.c
M source/blender/draw/engines/gpencil/gpencil_engine.h
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index d2b09509556..5b98d15da6f 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -300,12 +300,7 @@ static void GPENCIL_cache_init(void *vedata)
stl->storage->pixsize = DRW_viewport_pixelsize_get();
}
else {
- const float *viewport_size = DRW_viewport_size_get();
- CameraParams params;
- BKE_camera_params_init(¶ms);
- BKE_camera_params_from_object(¶ms, scene->camera);
- BKE_camera_params_compute_viewplane(¶ms, viewport_size[0], viewport_size[1], 1.0f, 1.0f);
- stl->storage->pixsize = ¶ms.viewdx;
+ stl->storage->pixsize = &stl->storage->render_pixsize;
}
/* detect if painting session */
@@ -864,6 +859,29 @@ static void GPENCIL_draw_scene(void *vedata)
}
}
+/* Get pixel size for render
+ * This function uses the same calculation used for viewport, because if use
+ * camera pixelsize, the result is not correct.
+ */
+static float get_render_pixelsize(float persmat[4][4], int winx, int winy)
+{
+ float v1[3], v2[3];
+ float len_px, len_sc;
+
+ v1[0] = persmat[0][0];
+ v1[1] = persmat[1][0];
+ v1[2] = persmat[2][0];
+
+ v2[0] = persmat[0][1];
+ v2[1] = persmat[1][1];
+ v2[2] = persmat[2][1];
+
+ len_px = 2.0f / sqrtf(min_ff(len_squared_v3(v1), len_squared_v3(v2)));
+ len_sc = (float)MAX2(winx, winy);
+
+ return len_px / len_sc;
+}
+
/* init render data */
void GPENCIL_render_init(GPENCIL_Data *ved, RenderEngine *engine, struct Depsgraph *depsgraph)
{
@@ -911,6 +929,8 @@ void GPENCIL_render_init(GPENCIL_Data *ved, RenderEngine *engine, struct Depsgra
DRW_viewport_matrix_override_set(stl->storage->viewmat, DRW_MAT_VIEW);
DRW_viewport_matrix_override_set(stl->storage->viewinv, DRW_MAT_VIEWINV);
+ /* calculate pixel size for render */
+ stl->storage->render_pixsize = get_render_pixelsize(stl->storage->persmat, viewport_size[0], viewport_size[1]);
/* INIT CACHE */
GPENCIL_cache_init(vedata);
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 0f7651fe6b2..70e3e3ff583 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -168,6 +168,7 @@ typedef struct GPENCIL_Storage {
float gridsize[2];
float gridcolor[3];
const float *pixsize;
+ float render_pixsize;
/* Render Matrices and data */
float persmat[4][4], persinv[4][4];
More information about the Bf-blender-cvs
mailing list