Draw Manager: Texture Memory usage improvement.

-Use 11_11_10 buffers for hdr content.
-Eevee compositing share 1 buffer if bloom and DOF are both activated.
-Fix slowdown when resizing EEVEE viewport.
-Removed DRW_BUF_*** enums causing confusion.
This commit is contained in:
2017-05-16 20:18:57 +02:00
parent ddc5896c81
commit 90aff807ab
20 changed files with 92 additions and 98 deletions

View File

@@ -136,7 +136,7 @@ static void BASIC_engine_init(void *vedata)
#ifdef USE_DEPTH
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
DRWFboTexture tex = {&txl->depth_dup, DRW_TEX_DEPTH_24, 0};
DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_basic_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);

View File

@@ -369,7 +369,7 @@ static void CLAY_engine_init(void *vedata)
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&e_data.depth_dup, DRW_BUF_DEPTH_24, DRW_TEX_TEMP};
DRWFboTexture tex = {&e_data.depth_dup, DRW_TEX_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);

View File

@@ -178,7 +178,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects = stl->effects;
effects->enabled_effects = 0;
int enabled_effects = 0;
#if ENABLE_EFFECT_MOTION_BLUR
if (BKE_collection_engine_property_value_get_bool(props, "motion_blur_enable")) {
@@ -207,7 +207,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
invert_m4(effects->current_ndc_to_world);
effects->motion_blur_samples = BKE_collection_engine_property_value_get_int(props, "motion_blur_samples");
effects->enabled_effects |= EFFECT_MOTION_BLUR;
enabled_effects |= EFFECT_MOTION_BLUR;
}
}
}
@@ -228,7 +228,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects->blit_texel_size[0] = 1.0f / (float)blitsize[0];
effects->blit_texel_size[1] = 1.0f / (float)blitsize[1];
DRWFboTexture tex_blit = {&txl->bloom_blit, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
DRWFboTexture tex_blit = {&txl->bloom_blit, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
DRW_framebuffer_init(&fbl->bloom_blit_fb, &draw_engine_eevee_type,
(int)blitsize[0], (int)blitsize[1],
&tex_blit, 1);
@@ -263,7 +263,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects->downsamp_texel_size[i][0] = 1.0f / (float)texsize[0];
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};
DRWFboTexture tex_bloom = {&txl->bloom_downsample[i], DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
DRW_framebuffer_init(&fbl->bloom_down_fb[i], &draw_engine_eevee_type,
(int)texsize[0], (int)texsize[1],
&tex_bloom, 1);
@@ -276,13 +276,13 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
texsize[0] = MAX2(texsize[0], 2);
texsize[1] = MAX2(texsize[1], 2);
DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], DRW_BUF_RGBA_16, DRW_TEX_FILTER};
DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
DRW_framebuffer_init(&fbl->bloom_accum_fb[i], &draw_engine_eevee_type,
(int)texsize[0], (int)texsize[1],
&tex_bloom, 1);
}
effects->enabled_effects |= EFFECT_BLOOM;
enabled_effects |= EFFECT_BLOOM;
}
#endif /* ENABLE_EFFECT_BLOOM */
@@ -298,16 +298,31 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
int buffer_size[2] = {(int)viewport_size[0] / 2, (int)viewport_size[1] / 2};
struct GPUTexture **dof_down_near = &txl->dof_down_near;
/* Reuse buffer from Bloom if available */
/* WATCH IT : must have the same size */
if ((enabled_effects & EFFECT_BLOOM) != 0) {
dof_down_near = &txl->bloom_downsample[0]; /* should always exists */
}
else if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
/* if framebuffer was configured to share buffer with bloom last frame */
if (fbl->dof_down_fb != NULL) {
DRW_framebuffer_free(fbl->dof_down_fb);
fbl->dof_down_fb = NULL;
}
}
/* Setup buffers */
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}};
DRWFboTexture tex_down[3] = {{dof_down_near, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER}, /* filter to not interfeer with bloom */
{&txl->dof_down_far, DRW_TEX_RGB_11_11_10, 0},
{&txl->dof_coc, DRW_TEX_RG_16, 0}};
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};
DRWFboTexture tex_scatter_far = {&txl->dof_far_blur, DRW_TEX_RGBA_16, DRW_TEX_FILTER};
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};
DRWFboTexture tex_scatter_near = {&txl->dof_near_blur, DRW_TEX_RGBA_16, DRW_TEX_FILTER};
DRW_framebuffer_init(&fbl->dof_scatter_near_fb, &draw_engine_eevee_type, buffer_size[0], buffer_size[1], &tex_scatter_near, 1);
/* Parameters */
@@ -341,15 +356,17 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
effects->dof_bokeh[2] = ratio;
effects->dof_bokeh[3] = BKE_collection_engine_property_value_get_float(props, "bokeh_max_size");
effects->enabled_effects |= EFFECT_DOF;
enabled_effects |= EFFECT_DOF;
}
}
#endif /* ENABLE_EFFECT_DOF */
effects->enabled_effects = enabled_effects;
/* Only allocate if at least one effect is activated */
if (effects->enabled_effects != 0) {
/* Ping Pong buffer */
DRWFboTexture tex = {&txl->color_post, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
DRWFboTexture tex = {&txl->color_post, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
DRW_framebuffer_init(&fbl->effect_fb, &draw_engine_eevee_type,
(int)viewport_size[0], (int)viewport_size[1],
@@ -538,7 +555,13 @@ void EEVEE_draw_effects(EEVEE_Data *vedata)
DRW_draw_pass(psl->dof_scatter);
/* Scatter Near */
effects->unf_source_buffer = txl->dof_down_near;
if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
/* Reuse bloom half res buffer */
effects->unf_source_buffer = txl->bloom_downsample[0];
}
else {
effects->unf_source_buffer = txl->dof_down_near;
}
copy_v2_fl2(effects->dof_layer_select, 1.0f, 0.0f);
DRW_framebuffer_bind(fbl->dof_scatter_near_fb);
DRW_framebuffer_clear(true, false, false, clear_col, 0.0f);

View File

@@ -165,7 +165,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};
DRWFboTexture tex_filter = {&tex, DRW_TEX_RG_16, DRW_TEX_FILTER};
DRW_framebuffer_init(&fb, &draw_engine_eevee_type, w, h, &tex_filter, 1);
DRW_framebuffer_bind(fb);
@@ -212,7 +212,7 @@ static void EEVEE_engine_init(void *ved)
EEVEE_FramebufferList *fbl = vedata->fbl;
EEVEE_StorageList *stl = vedata->stl;
DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
DRWFboTexture tex = {&txl->color, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
const float *viewport_size = DRW_viewport_size_get();
DRW_framebuffer_init(&fbl->main, &draw_engine_eevee_type,

View File

@@ -167,13 +167,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};
DRWFboTexture tex_cube = {&txl->shadow_depth_cube_pool, DRW_TEX_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
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};
DRWFboTexture tex_map = {&txl->shadow_depth_map_pool, DRW_TEX_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
DRW_framebuffer_init(&fbl->shadow_map_fb, &draw_engine_eevee_type, 512, 512, &tex_map, 1);
DRWFboTexture tex_cascade = {&txl->shadow_depth_cascade_pool, DRW_BUF_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
DRWFboTexture tex_cascade = {&txl->shadow_depth_cascade_pool, DRW_TEX_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
DRW_framebuffer_init(&fbl->shadow_cascade_fb, &draw_engine_eevee_type, 512, 512, &tex_cascade, 1);
}

View File

@@ -54,53 +54,26 @@ void EEVEE_probes_init(EEVEE_Data *vedata)
}
if (!txl->probe_rt) {
float *test_tex;
const float face_col[6][4] = {{1.0f, 0.0f, 0.0f, 1.0f}, {0.0f, 1.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f},
{1.0f, 0.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 0.0f, 1.0f}, {0.0f, 1.0f, 1.0f, 1.0f}};
test_tex = MEM_mallocN(sizeof(float) * 6 * PROBE_SIZE * PROBE_SIZE * 4, "test tex");
for (int i = 0; i < 6; ++i) {
for (int j = 0; j < PROBE_SIZE * PROBE_SIZE; ++j) {
copy_v4_v4(test_tex + i * PROBE_SIZE * PROBE_SIZE * 4 + j * 4, face_col[i]);
}
}
txl->probe_rt = DRW_texture_create_cube(PROBE_SIZE, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP, (float *)test_tex);
txl->probe_rt = DRW_texture_create_cube(PROBE_SIZE, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
txl->probe_depth_rt = DRW_texture_create_cube(PROBE_SIZE, DRW_TEX_DEPTH_24, DRW_TEX_FILTER, NULL);
MEM_freeN(test_tex);
}
DRWFboTexture tex_probe[2] = {{&txl->probe_depth_rt, DRW_BUF_DEPTH_24, DRW_TEX_FILTER},
{&txl->probe_rt, DRW_BUF_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP}};
DRWFboTexture tex_probe[2] = {{&txl->probe_depth_rt, DRW_TEX_DEPTH_24, DRW_TEX_FILTER},
{&txl->probe_rt, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP}};
DRW_framebuffer_init(&fbl->probe_fb, &draw_engine_eevee_type, PROBE_SIZE, PROBE_SIZE, tex_probe, 2);
if (!txl->probe_pool) {
float *test_tex;
const float face_col[6][4] = {{1.0f, 0.0f, 0.0f, 1.0f}, {0.0f, 1.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f},
{1.0f, 0.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 0.0f, 1.0f}, {0.0f, 1.0f, 1.0f, 1.0f}};
test_tex = MEM_mallocN(sizeof(float) * 6 * PROBE_SIZE * PROBE_SIZE * 4, "test tex");
for (int i = 0; i < 6; ++i) {
for (int j = 0; j < PROBE_SIZE * PROBE_SIZE; ++j) {
copy_v4_v4(test_tex + i * PROBE_SIZE * PROBE_SIZE * 4 + j * 4, face_col[i]);
}
}
/* TODO array */
txl->probe_pool = DRW_texture_create_cube(PROBE_SIZE, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP, (float *)test_tex);
MEM_freeN(test_tex);
txl->probe_pool = DRW_texture_create_cube(PROBE_SIZE, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
}
DRWFboTexture tex_filter = {&txl->probe_pool, DRW_BUF_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
DRWFboTexture tex_filter = {&txl->probe_pool, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
DRW_framebuffer_init(&fbl->probe_filter_fb, &draw_engine_eevee_type, PROBE_SIZE, PROBE_SIZE, &tex_filter, 1);
/* Spherical Harmonic Buffer */
DRWFboTexture tex_sh = {&txl->probe_sh, DRW_BUF_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
DRWFboTexture tex_sh = {&txl->probe_sh, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
DRW_framebuffer_init(&fbl->probe_sh_fb, &draw_engine_eevee_type, 9, 1, &tex_sh, 1);
}

View File

@@ -131,6 +131,7 @@ typedef enum {
DRW_TEX_RGBA_8,
DRW_TEX_RGBA_16,
DRW_TEX_RGBA_32,
DRW_TEX_RGB_11_11_10,
DRW_TEX_RGB_8,
DRW_TEX_RGB_16,
DRW_TEX_RGB_32,
@@ -176,20 +177,6 @@ void DRW_uniformbuffer_update(struct GPUUniformBuffer *ubo, const void *data);
void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo);
/* Buffers */
/* DRWFboTexture->format */
#define DRW_BUF_DEPTH_16 1
#define DRW_BUF_DEPTH_24 2
#define DRW_BUF_R_8 3
#define DRW_BUF_R_16 4
#define DRW_BUF_R_32 5
#define DRW_BUF_RG_8 6
#define DRW_BUF_RG_16 7
#define DRW_BUF_RG_32 8
#define DRW_BUF_RGBA_8 12
#define DRW_BUF_RGBA_16 13
#define DRW_BUF_RGBA_32 14
#define MAX_FBO_TEX 5
typedef struct DRWFboTexture {
@@ -201,6 +188,7 @@ typedef struct DRWFboTexture {
void DRW_framebuffer_init(
struct GPUFrameBuffer **fb, void *engine_type, int width, int height,
DRWFboTexture textures[MAX_FBO_TEX], int textures_len);
void DRW_framebuffer_free(struct GPUFrameBuffer *fb);
void DRW_framebuffer_bind(struct GPUFrameBuffer *fb);
void DRW_framebuffer_clear(bool color, bool depth, bool stencil, float clear_col[4], float clear_depth);
void DRW_framebuffer_read_data(int x, int y, int w, int h, int channels, int slot, float *data);

View File

@@ -317,6 +317,7 @@ static void drw_texture_get_format(DRWTextureFormat format, GPUTextureFormat *da
case DRW_TEX_RGBA_8: *data_type = GPU_RGBA8; break;
case DRW_TEX_RGBA_16: *data_type = GPU_RGBA16F; break;
case DRW_TEX_RGB_16: *data_type = GPU_RGB16F; break;
case DRW_TEX_RGB_11_11_10: *data_type = GPU_R11F_G11F_B10F; break;
case DRW_TEX_RG_16: *data_type = GPU_RG16F; break;
case DRW_TEX_RG_32: *data_type = GPU_RG32F; break;
case DRW_TEX_R_8: *data_type = GPU_R8; break;
@@ -346,6 +347,7 @@ static void drw_texture_get_format(DRWTextureFormat format, GPUTextureFormat *da
case DRW_TEX_RGB_8:
case DRW_TEX_RGB_16:
case DRW_TEX_RGB_32:
case DRW_TEX_RGB_11_11_10:
*channels = 3;
break;
case DRW_TEX_RG_8:
@@ -1854,16 +1856,17 @@ bool DRW_object_is_renderable(Object *ob)
static GPUTextureFormat convert_tex_format(int fbo_format, int *channels, bool *is_depth)
{
*is_depth = ELEM(fbo_format, DRW_BUF_DEPTH_16, DRW_BUF_DEPTH_24);
*is_depth = ELEM(fbo_format, DRW_TEX_DEPTH_16, DRW_TEX_DEPTH_24);
switch (fbo_format) {
case DRW_BUF_RG_16: *channels = 2; return GPU_RG16F;
case DRW_BUF_RGBA_8: *channels = 4; return GPU_RGBA8;
case DRW_BUF_RGBA_16: *channels = 4; return GPU_RGBA16F;
case DRW_BUF_RGBA_32: *channels = 4; return GPU_RGBA32F;
case DRW_BUF_DEPTH_24: *channels = 1; return GPU_DEPTH_COMPONENT24;
case DRW_TEX_RG_16: *channels = 2; return GPU_RG16F;
case DRW_TEX_RGBA_8: *channels = 4; return GPU_RGBA8;
case DRW_TEX_RGBA_16: *channels = 4; return GPU_RGBA16F;
case DRW_TEX_RGBA_32: *channels = 4; return GPU_RGBA32F;
case DRW_TEX_DEPTH_24: *channels = 1; return GPU_DEPTH_COMPONENT24;
case DRW_TEX_RGB_11_11_10: *channels = 3; return GPU_R11F_G11F_B10F;
default:
BLI_assert(false);
BLI_assert(false && "Texture format unsupported as render target!");
*channels = 4; return GPU_RGBA8;
}
}
@@ -1901,7 +1904,7 @@ void DRW_framebuffer_init(
++color_attachment;
}
GPU_framebuffer_texture_attach(*fb, *fbotex.tex, color_attachment, 0);
GPU_framebuffer_texture_attach(*fb, *fbotex.tex, color_attachment, 0);
}
if (!GPU_framebuffer_check_valid(*fb, NULL)) {
@@ -1921,6 +1924,11 @@ void DRW_framebuffer_init(
}
}
void DRW_framebuffer_free(struct GPUFrameBuffer *fb)
{
GPU_framebuffer_free(fb);
}
void DRW_framebuffer_bind(struct GPUFrameBuffer *fb)
{
GPU_framebuffer_bind(fb);

View File

@@ -140,8 +140,8 @@ static void EDIT_CURVE_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -130,8 +130,8 @@ static void EDIT_LATTICE_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -135,8 +135,8 @@ static void EDIT_MESH_engine_init(void *vedata)
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex[2] = {{
&e_data.occlude_wire_depth_tx, DRW_BUF_DEPTH_24, DRW_TEX_TEMP},
{&e_data.occlude_wire_color_tx, DRW_BUF_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP}
&e_data.occlude_wire_depth_tx, DRW_TEX_DEPTH_24, DRW_TEX_TEMP},
{&e_data.occlude_wire_color_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP}
};
DRW_framebuffer_init(
&fbl->occlude_wire_fb, &draw_engine_edit_mesh_type,

View File

@@ -117,8 +117,8 @@ static void EDIT_METABALL_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -117,8 +117,8 @@ static void EDIT_SURFACE_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -127,8 +127,8 @@ static void EDIT_TEXT_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -215,8 +215,8 @@ static void OBJECT_engine_init(void *vedata)
if (DRW_state_is_fbo()) {
DRWFboTexture tex[2] = {
{&e_data.outlines_depth_tx, DRW_BUF_DEPTH_24, DRW_TEX_TEMP},
{&e_data.outlines_color_tx, DRW_BUF_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP},
{&e_data.outlines_depth_tx, DRW_TEX_DEPTH_24, DRW_TEX_TEMP},
{&e_data.outlines_color_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP},
};
DRW_framebuffer_init(
@@ -224,7 +224,7 @@ static void OBJECT_engine_init(void *vedata)
(int)viewport_size[0], (int)viewport_size[1],
tex, 2);
DRWFboTexture blur_tex = {&e_data.outlines_blur_tx, DRW_BUF_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP};
DRWFboTexture blur_tex = {&e_data.outlines_blur_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP};
DRW_framebuffer_init(
&fbl->blur, &draw_engine_object_type,
(int)viewport_size[0], (int)viewport_size[1],

View File

@@ -117,8 +117,8 @@ static void PAINT_TEXTURE_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -111,8 +111,8 @@ static void PARTICLE_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -121,8 +121,8 @@ static void SCULPT_engine_init(void *vedata)
/* Init Framebuffers like this: order is attachment order (for color texs) */
/*
* DRWFboTexture tex[2] = {{&txl->depth, DRW_BUF_DEPTH_24, 0},
* {&txl->color, DRW_BUF_RGBA_8, DRW_TEX_FILTER}};
* DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
* {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
*/
/* DRW_framebuffer_init takes care of checking if

View File

@@ -97,11 +97,11 @@ typedef enum GPUTextureFormat {
/* Special formats texture & renderbuffer */
#if 0
GPU_R11F_G11F_B10F,
GPU_RGB10_A2,
GPU_RGB10_A2UI,
GPU_DEPTH32F_STENCIL8,
#endif
GPU_R11F_G11F_B10F,
GPU_DEPTH24_STENCIL8,
/* Texture only format */

View File

@@ -158,6 +158,7 @@ static GLenum gpu_texture_get_format(
case GPU_DEPTH24_STENCIL8:
case GPU_DEPTH_COMPONENT32F:
case GPU_RGBA8:
case GPU_R11F_G11F_B10F:
*bytesize = 4;
break;
case GPU_DEPTH_COMPONENT24:
@@ -188,6 +189,7 @@ static GLenum gpu_texture_get_format(
case GPU_R16F: return GL_R16F;
case GPU_R8: return GL_R8;
/* Special formats texture & renderbuffer */
case GPU_R11F_G11F_B10F: return GL_R11F_G11F_B10F;
case GPU_DEPTH24_STENCIL8: return GL_DEPTH24_STENCIL8;
/* Texture only format */
/* ** Add Format here **/