[Bf-blender-cvs] [637b0154ad0] greasepencil-object: Cleanup: Create shaders in a separate function
Antonio Vazquez
noreply at git.blender.org
Wed Apr 4 16:17:15 CEST 2018
Commit: 637b0154ad0080c6266d4b6ae2e24ffcddb4953b
Author: Antonio Vazquez
Date: Wed Apr 4 15:54:29 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB637b0154ad0080c6266d4b6ae2e24ffcddb4953b
Cleanup: Create shaders in a separate function
===================================================================
M source/blender/draw/engines/gpencil/gpencil_engine.c
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 1cae05abc8c..9c1566a2d67 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -79,86 +79,31 @@ extern char datatoc_gpencil_dof_frag_glsl[];
static GPENCIL_e_data e_data = {NULL}; /* Engine data */
/* *********** FUNCTIONS *********** */
-
-static void GPENCIL_engine_init(void *vedata)
+static void GPENCIL_create_shaders(void)
{
- GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
- GPENCIL_FramebufferList *fbl = ((GPENCIL_Data *)vedata)->fbl;
- const DRWContextState *draw_ctx = DRW_context_state_get();
- View3D *v3d = draw_ctx->v3d;
- RegionView3D *rv3d = draw_ctx->rv3d;
-
- /* Go full 32bits for rendering */
- DRWTextureFormat fb_format = DRW_state_is_image_render() ? DRW_TEX_RGBA_32 : DRW_TEX_RGBA_16;
-
- if (DRW_state_is_fbo()) {
- const float *viewport_size = DRW_viewport_size_get();
- const int size[2] = { (int)viewport_size[0], (int)viewport_size[1] };
-
- /* temp framebuffer to store all stroke drawing before sending to default or used
- * by vfx shaders as initial input
- */
- e_data.temp_depth_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
- &draw_engine_object_type);
- e_data.temp_color_tx = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
- &draw_engine_object_type);
- GPU_framebuffer_ensure_config(&fbl->temp_fb, {
- GPU_ATTACHMENT_TEXTURE(e_data.temp_depth_tx),
- GPU_ATTACHMENT_TEXTURE(e_data.temp_color_tx)
- });
-
- /* vfx (ping-pong textures) */
- e_data.vfx_depth_tx_a = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
- &draw_engine_object_type);
- e_data.vfx_color_tx_a = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
- &draw_engine_object_type);
- GPU_framebuffer_ensure_config(&fbl->vfx_fb_a, {
- GPU_ATTACHMENT_TEXTURE(e_data.vfx_depth_tx_a),
- GPU_ATTACHMENT_TEXTURE(e_data.vfx_color_tx_a)
- });
-
- e_data.vfx_depth_tx_b = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
- &draw_engine_object_type);
- e_data.vfx_color_tx_b = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
- &draw_engine_object_type);
- GPU_framebuffer_ensure_config(&fbl->vfx_fb_b, {
- GPU_ATTACHMENT_TEXTURE(e_data.vfx_depth_tx_b),
- GPU_ATTACHMENT_TEXTURE(e_data.vfx_color_tx_b)
- });
-
- /* painting framebuffer to speed up drawing process (always 16 bits) */
- e_data.painting_depth_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
- &draw_engine_object_type);
- e_data.painting_color_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_RGBA_16,
- &draw_engine_object_type);
- GPU_framebuffer_ensure_config(&fbl->painting_fb, {
- GPU_ATTACHMENT_TEXTURE(e_data.painting_depth_tx),
- GPU_ATTACHMENT_TEXTURE(e_data.painting_color_tx)
- });
- }
/* normal fill shader */
if (!e_data.gpencil_fill_sh) {
e_data.gpencil_fill_sh = DRW_shader_create(
- datatoc_gpencil_fill_vert_glsl, NULL,
- datatoc_gpencil_fill_frag_glsl, NULL);
+ datatoc_gpencil_fill_vert_glsl, NULL,
+ datatoc_gpencil_fill_frag_glsl, NULL);
}
/* normal stroke shader using geometry to display lines (line mode) */
if (!e_data.gpencil_stroke_sh) {
e_data.gpencil_stroke_sh = DRW_shader_create(
- datatoc_gpencil_stroke_vert_glsl,
- datatoc_gpencil_stroke_geom_glsl,
- datatoc_gpencil_stroke_frag_glsl,
- NULL);
+ datatoc_gpencil_stroke_vert_glsl,
+ datatoc_gpencil_stroke_geom_glsl,
+ datatoc_gpencil_stroke_frag_glsl,
+ NULL);
}
-
+
/* dot/rectangle mode for normal strokes using geometry */
if (!e_data.gpencil_point_sh) {
e_data.gpencil_point_sh = DRW_shader_create(
- datatoc_gpencil_point_vert_glsl,
- datatoc_gpencil_point_geom_glsl,
- datatoc_gpencil_point_frag_glsl,
- NULL);
+ datatoc_gpencil_point_vert_glsl,
+ datatoc_gpencil_point_geom_glsl,
+ datatoc_gpencil_point_frag_glsl,
+ NULL);
}
/* used for edit points or strokes with one point only */
if (!e_data.gpencil_edit_point_sh) {
@@ -211,6 +156,69 @@ static void GPENCIL_engine_init(void *vedata)
e_data.gpencil_paper_sh = DRW_shader_create_fullscreen(datatoc_gpencil_paper_frag_glsl, NULL);
}
+}
+
+
+static void GPENCIL_engine_init(void *vedata)
+{
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+ GPENCIL_FramebufferList *fbl = ((GPENCIL_Data *)vedata)->fbl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ /* Go full 32bits for rendering */
+ DRWTextureFormat fb_format = DRW_state_is_image_render() ? DRW_TEX_RGBA_32 : DRW_TEX_RGBA_16;
+
+ if (DRW_state_is_fbo()) {
+ const float *viewport_size = DRW_viewport_size_get();
+ const int size[2] = { (int)viewport_size[0], (int)viewport_size[1] };
+
+ /* temp framebuffer to store all stroke drawing before sending to default or used
+ * by vfx shaders as initial input
+ */
+ e_data.temp_depth_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
+ &draw_engine_object_type);
+ e_data.temp_color_tx = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
+ &draw_engine_object_type);
+ GPU_framebuffer_ensure_config(&fbl->temp_fb, {
+ GPU_ATTACHMENT_TEXTURE(e_data.temp_depth_tx),
+ GPU_ATTACHMENT_TEXTURE(e_data.temp_color_tx)
+ });
+
+ /* vfx (ping-pong textures) */
+ e_data.vfx_depth_tx_a = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
+ &draw_engine_object_type);
+ e_data.vfx_color_tx_a = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
+ &draw_engine_object_type);
+ GPU_framebuffer_ensure_config(&fbl->vfx_fb_a, {
+ GPU_ATTACHMENT_TEXTURE(e_data.vfx_depth_tx_a),
+ GPU_ATTACHMENT_TEXTURE(e_data.vfx_color_tx_a)
+ });
+
+ e_data.vfx_depth_tx_b = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
+ &draw_engine_object_type);
+ e_data.vfx_color_tx_b = DRW_texture_pool_query_2D(size[0], size[1], fb_format,
+ &draw_engine_object_type);
+ GPU_framebuffer_ensure_config(&fbl->vfx_fb_b, {
+ GPU_ATTACHMENT_TEXTURE(e_data.vfx_depth_tx_b),
+ GPU_ATTACHMENT_TEXTURE(e_data.vfx_color_tx_b)
+ });
+
+ /* painting framebuffer to speed up drawing process (always 16 bits) */
+ e_data.painting_depth_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_DEPTH_24_STENCIL_8,
+ &draw_engine_object_type);
+ e_data.painting_color_tx = DRW_texture_pool_query_2D(size[0], size[1], DRW_TEX_RGBA_16,
+ &draw_engine_object_type);
+ GPU_framebuffer_ensure_config(&fbl->painting_fb, {
+ GPU_ATTACHMENT_TEXTURE(e_data.painting_depth_tx),
+ GPU_ATTACHMENT_TEXTURE(e_data.painting_color_tx)
+ });
+ }
+
+ /* create shaders */
+ GPENCIL_create_shaders();
+
if (!stl->storage) {
stl->storage = MEM_callocN(sizeof(GPENCIL_Storage), "GPENCIL_Storage");
}
More information about the Bf-blender-cvs
mailing list