[Bf-blender-cvs] [2e8cb8d8361] blender2.8: Draw Manager: Make use of texture reuse.
Clément Foucault
noreply at git.blender.org
Tue May 16 21:31:03 CEST 2017
Commit: 2e8cb8d836167e82599414e4d5ff3d15b609fc12
Author: Clément Foucault
Date: Tue May 16 03:03:58 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2e8cb8d836167e82599414e4d5ff3d15b609fc12
Draw Manager: Make use of texture reuse.
===================================================================
M source/blender/draw/engines/basic/basic_engine.c
M source/blender/draw/engines/basic/basic_engine.h
M source/blender/draw/engines/clay/clay_engine.c
M source/blender/draw/engines/clay/clay_engine.h
M source/blender/draw/engines/eevee/eevee_effects.c
M source/blender/draw/engines/eevee/eevee_engine.c
M source/blender/draw/engines/eevee/eevee_lights.c
M source/blender/draw/engines/eevee/eevee_private.h
M source/blender/draw/engines/eevee/eevee_probes.c
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/draw/modes/edit_mesh_mode.c
M source/blender/draw/modes/object_mode.c
===================================================================
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index e10eaaac128..64585604bbd 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -137,7 +137,7 @@ static void BASIC_engine_init(void *vedata)
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
- DRW_framebuffer_init(&fbl->dupli_depth,
+ DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_basic_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);
}
diff --git a/source/blender/draw/engines/basic/basic_engine.h b/source/blender/draw/engines/basic/basic_engine.h
index 4fd559ca50a..0adf99835a2 100644
--- a/source/blender/draw/engines/basic/basic_engine.h
+++ b/source/blender/draw/engines/basic/basic_engine.h
@@ -26,6 +26,7 @@
#ifndef __BASIC_ENGINE_H__
#define __BASIC_ENGINE_H__
+extern DrawEngineType draw_engine_basic_type;
extern RenderEngineType DRW_engine_viewport_basic_type;
#endif /* __BASIC_ENGINE_H__ */
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index 8abf85a14cc..3d692c0b3d9 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -109,14 +109,6 @@ typedef struct CLAY_FramebufferList {
struct GPUFrameBuffer *dupli_depth;
} CLAY_FramebufferList;
-typedef struct CLAY_TextureList {
- /* default */
- struct GPUTexture *color;
- struct GPUTexture *depth;
- /* engine specific */
- struct GPUTexture *depth_dup;
-} CLAY_TextureList;
-
typedef struct CLAY_PassList {
struct DRWPass *depth_pass;
struct DRWPass *depth_pass_cull;
@@ -127,7 +119,7 @@ typedef struct CLAY_PassList {
typedef struct CLAY_Data {
void *engine_type;
CLAY_FramebufferList *fbl;
- CLAY_TextureList *txl;
+ DRWViewportEmptyList *txl;
CLAY_PassList *psl;
CLAY_StorageList *stl;
} CLAY_Data;
@@ -155,6 +147,10 @@ static struct {
/* Just a serie of int from 0 to MAX_CLAY_MAT-1 */
int ubo_mat_idxs[MAX_CLAY_MAT];
+ int hair_ubo_mat_idxs[MAX_CLAY_MAT];
+
+ /* engine specific */
+ struct GPUTexture *depth_dup;
} e_data = {NULL}; /* Engine data */
typedef struct CLAY_PrivateData {
@@ -281,7 +277,6 @@ static struct GPUTexture *create_jitter_texture(void)
static void CLAY_engine_init(void *vedata)
{
CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
- CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
/* Create Texture Array */
@@ -374,8 +369,8 @@ static void CLAY_engine_init(void *vedata)
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
- DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
- DRW_framebuffer_init(&fbl->dupli_depth,
+ DRWFboTexture tex = {&e_data.depth_dup, DRW_BUF_DEPTH_24, DRW_TEX_TEMP};
+ DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_clay_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);
}
@@ -448,14 +443,12 @@ static void CLAY_engine_init(void *vedata)
}
}
-static DRWShadingGroup *CLAY_shgroup_create(CLAY_Data *vedata, DRWPass *pass, int *material_id)
+static DRWShadingGroup *CLAY_shgroup_create(CLAY_Data *UNUSED(vedata), DRWPass *pass, int *material_id)
{
- CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
-
DRWShadingGroup *grp = DRW_shgroup_create(e_data.clay_sh, pass);
DRW_shgroup_uniform_vec2(grp, "screenres", DRW_viewport_size_get(), 1);
- DRW_shgroup_uniform_buffer(grp, "depthtex", &txl->depth_dup);
+ DRW_shgroup_uniform_buffer(grp, "depthtex", &e_data.depth_dup);
DRW_shgroup_uniform_texture(grp, "matcaps", e_data.matcap_array);
DRW_shgroup_uniform_mat4(grp, "WinMatrix", (float *)e_data.winmat);
DRW_shgroup_uniform_vec4(grp, "viewvecs[0]", (float *)e_data.viewvecs, 3);
@@ -803,7 +796,16 @@ static void CLAY_draw_scene(void *vedata)
/* Pass 2 : Duplicate depth */
/* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
if (DRW_state_is_fbo()) {
+ /* attach temp textures */
+ DRW_framebuffer_texture_attach(fbl->dupli_depth, e_data.depth_dup, 0, 0);
+
DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true);
+
+ /* detach temp textures */
+ DRW_framebuffer_texture_detach(e_data.depth_dup);
+
+ /* restore default fb */
+ DRW_framebuffer_bind(dfbl->default_fb);
}
/* Pass 3 : Shading */
diff --git a/source/blender/draw/engines/clay/clay_engine.h b/source/blender/draw/engines/clay/clay_engine.h
index 9d07c6c217b..b7c9d00c9ae 100644
--- a/source/blender/draw/engines/clay/clay_engine.h
+++ b/source/blender/draw/engines/clay/clay_engine.h
@@ -26,6 +26,7 @@
#ifndef __CLAY_ENGINE_H__
#define __CLAY_ENGINE_H__
+extern DrawEngineType draw_engine_clay_type;
extern RenderEngineType DRW_engine_viewport_clay_type;
struct IDProperty;
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index d5e712601ad..0a86fc1afb4 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -229,7 +229,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects->blit_texel_size[1] = 1.0f / (float)blitsize[1];
DRWFboTexture tex_blit = {&txl->bloom_blit, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->bloom_blit_fb,
+ DRW_framebuffer_init(&fbl->bloom_blit_fb, &draw_engine_eevee_type,
(int)blitsize[0], (int)blitsize[1],
&tex_blit, 1);
@@ -264,7 +264,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects->downsamp_texel_size[i][1] = 1.0f / (float)texsize[1];
DRWFboTexture tex_bloom = {&txl->bloom_downsample[i], DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->bloom_down_fb[i],
+ DRW_framebuffer_init(&fbl->bloom_down_fb[i], &draw_engine_eevee_type,
(int)texsize[0], (int)texsize[1],
&tex_bloom, 1);
}
@@ -277,7 +277,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
texsize[1] = MAX2(texsize[1], 2);
DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->bloom_accum_fb[i],
+ DRW_framebuffer_init(&fbl->bloom_accum_fb[i], &draw_engine_eevee_type,
(int)texsize[0], (int)texsize[1],
&tex_bloom, 1);
}
@@ -302,13 +302,13 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
DRWFboTexture tex_down[3] = {{&txl->dof_down_near, DRW_BUF_RGBA_16, 0},
{&txl->dof_down_far, DRW_BUF_RGBA_16, 0},
{&txl->dof_coc, DRW_BUF_RG_16, 0}};
- DRW_framebuffer_init(&fbl->dof_down_fb, buffer_size[0], buffer_size[1], tex_down, 3);
+ DRW_framebuffer_init(&fbl->dof_down_fb, &draw_engine_eevee_type, buffer_size[0], buffer_size[1], tex_down, 3);
DRWFboTexture tex_scatter_far = {&txl->dof_far_blur, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->dof_scatter_far_fb, buffer_size[0], buffer_size[1], &tex_scatter_far, 1);
+ DRW_framebuffer_init(&fbl->dof_scatter_far_fb, &draw_engine_eevee_type, buffer_size[0], buffer_size[1], &tex_scatter_far, 1);
DRWFboTexture tex_scatter_near = {&txl->dof_near_blur, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->dof_scatter_near_fb, buffer_size[0], buffer_size[1], &tex_scatter_near, 1);
+ DRW_framebuffer_init(&fbl->dof_scatter_near_fb, &draw_engine_eevee_type, buffer_size[0], buffer_size[1], &tex_scatter_near, 1);
/* Parameters */
/* TODO UI Options */
@@ -351,7 +351,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
/* Ping Pong buffer */
DRWFboTexture tex = {&txl->color_post, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fbl->effect_fb,
+ DRW_framebuffer_init(&fbl->effect_fb, &draw_engine_eevee_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);
}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 14dc4a0dbc0..7311ec5a459 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -166,7 +166,7 @@ static struct GPUTexture *create_ggx_lut_texture(int UNUSED(w), int UNUSED(h))
tex = DRW_texture_create_2D(w, h, DRW_TEX_RG_16, DRW_TEX_FILTER, (float *)texels);
DRWFboTexture tex_filter = {&tex, DRW_BUF_RG_16, DRW_TEX_FILTER};
- DRW_framebuffer_init(&fb, w, h, &tex_filter, 1);
+ DRW_framebuffer_init(&fb, &draw_engine_eevee_type, w, h, &tex_filter, 1);
DRW_framebuffer_bind(fb);
DRW_draw_pass(pass);
@@ -215,7 +215,7 @@ static void EEVEE_engine_init(void *ved)
DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
const float *viewport_size = DRW_viewport_size_get();
- DRW_framebuffer_init(&fbl->main,
+ DRW_framebuffer_init(&fbl->main, &draw_engine_eevee_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 15f0b6e99b2..bec3d8a047a 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -168,13 +168,13 @@ void EEVEE_lights_cache_finish(EEVEE_StorageList *stl, EEVEE_TextureList *txl, E
}
DRWFboTexture tex_cube = {&txl->shadow_depth_cube_pool, DRW_BUF_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
- DRW_framebuffer_init(&fbl->shadow_cube_fb, 512, 512, &tex_cube, 1);
+ DRW_framebuffer_init(&fbl->shadow_cube_fb, &draw_engine_eevee_type, 512, 512, &tex_cube, 1);
DRWFboTexture tex_map = {&txl->shadow_depth_map_pool, DRW_BUF_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
- DRW_framebuffer_init(&fbl->shadow_map_fb, 512, 512, &tex_map, 1);
+ DRW_framebuffer_init(&fbl->shadow_map_fb, &draw_engine_eevee_type, 512, 512, &tex_map, 1);
DRWFboTexture tex_cascade = {&txl->shadow
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list