Workbench: added draw_scene_finish to workbench_materials

This commit is contained in:
Jeroen Bakker 2018-04-19 10:41:24 +02:00
parent 79899373eb
commit 3a4a5ed378
4 changed files with 21 additions and 19 deletions

View File

@ -71,9 +71,8 @@ static void workbench_solid_flat_cache_populate(void *vedata, Object *ob)
workbench_materials_solid_cache_populate(data, ob, V3D_LIGHTING_FLAT);
}
static void workbench_solid_flat_cache_finish(void *vedata)
static void workbench_solid_flat_cache_finish(void *UNUSED(vedata))
{
workbench_materials_cache_finish((WORKBENCH_Data *)vedata);
}
static void workbench_solid_flat_draw_scene(void *vedata)
@ -83,11 +82,13 @@ static void workbench_solid_flat_draw_scene(void *vedata)
DRW_draw_pass(psl->depth_pass);
DRW_draw_pass(psl->solid_pass);
workbench_materials_draw_scene_finish(data);
}
static void workbench_solid_flat_engine_free(void)
{
workbench_materials_engine_finish();
workbench_materials_engine_free();
}
static const DrawEngineDataSize workbench_data_size = DRW_VIEWPORT_DATA_SIZE(WORKBENCH_Data);

View File

@ -83,12 +83,12 @@ static void workbench_solid_studio_draw_scene(void *vedata)
DRW_draw_pass(psl->depth_pass);
DRW_draw_pass(psl->solid_pass);
workbench_materials_cache_finish((WORKBENCH_Data *)vedata);
workbench_materials_draw_scene_finish(data);
}
static void workbench_solid_studio_engine_free(void)
{
workbench_materials_engine_finish();
workbench_materials_engine_free();
}
static const DrawEngineDataSize workbench_data_size = DRW_VIEWPORT_DATA_SIZE(WORKBENCH_Data);
@ -108,3 +108,4 @@ DrawEngineType draw_engine_workbench_solid_studio = {
NULL,
NULL,
};

View File

@ -82,12 +82,22 @@ void workbench_materials_engine_init(void)
}
}
void workbench_materials_engine_finish(void)
void workbench_materials_engine_free()
{
DRW_SHADER_FREE_SAFE(e_data.solid_flat_sh);
DRW_SHADER_FREE_SAFE(e_data.solid_studio_sh);
}
void workbench_materials_draw_scene_finish(WORKBENCH_Data *vedata)
{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PrivateData *wpd = stl->g_data;
BLI_ghash_free(wpd->material_hash, NULL, MEM_freeN);
}
void workbench_materials_cache_init(WORKBENCH_Data *vedata)
{
WORKBENCH_StorageList *stl = vedata->stl;
@ -123,9 +133,7 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
if (material == NULL) {
material = MEM_mallocN(sizeof(WORKBENCH_MaterialData), "WORKBENCH_MaterialData");
material->shgrp = DRW_shgroup_create(shader, psl->solid_pass);
material->color[0] = color[0];
material->color[1] = color[1];
material->color[2] = color[2];
copy_v3_v3(material->color, color);
DRW_shgroup_uniform_vec3(material->shgrp, "color", material->color, 1);
BLI_ghash_insert(wpd->material_hash, SET_UINT_IN_POINTER(hash), material);
}
@ -134,10 +142,3 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
}
}
void workbench_materials_cache_finish(WORKBENCH_Data *vedata)
{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PrivateData *wpd = stl->g_data;
BLI_ghash_free(wpd->material_hash, NULL, MEM_freeN);
}

View File

@ -77,10 +77,9 @@ void workbench_solid_materials_free(void);
/* workbench_materials.c */
void workbench_materials_engine_init(void);
void workbench_materials_engine_finish(void);
void workbench_materials_engine_free(void);
void workbench_materials_draw_scene_finish(WORKBENCH_Data *vedata);
void workbench_materials_cache_init(WORKBENCH_Data *vedata);
void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob, int lighting_mode);
void workbench_materials_cache_finish(WORKBENCH_Data *vedata);
#endif