Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_materials.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index e9337761231..873d24116a1 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -22,7 +22,7 @@
/** \file workbench_materials.c
* \ingroup draw_engine
*/
-
+
#include "workbench_private.h"
#include "GPU_shader.h"
@@ -32,7 +32,7 @@ static struct {
/* Solid flat mode */
struct GPUShader *solid_flat_sh;
-
+
/* Solid studio mode */
struct GPUShader *solid_studio_sh;
@@ -46,22 +46,24 @@ extern char datatoc_workbench_studio_vert_glsl[];
extern char datatoc_workbench_diffuse_lib_glsl[];
/* Functions */
-static uint get_material_hash(const float color[3]) {
+static uint get_material_hash(const float color[3])
+{
uint r = (uint)(color[0] * 512);
uint g = (uint)(color[1] * 512);
uint b = (uint)(color[2] * 512);
-
+
return r + g * 4096 + b * 4096 * 4096;
}
-WORKBENCH_MaterialData* workbench_get_or_create_solid_flat_material_data(WORKBENCH_Data *vedata, const float color[3]) {
+WORKBENCH_MaterialData *workbench_get_or_create_solid_flat_material_data(WORKBENCH_Data *vedata, const float color[3])
+{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PassList *psl = vedata->psl;
- WORKBENCH_PrivateData* wpd = stl->g_data;
-
+ WORKBENCH_PrivateData *wpd = stl->g_data;
+
uint hash = get_material_hash(color);
WORKBENCH_MaterialData *material;
-
+
material = BLI_ghash_lookup(wpd->material_hash, SET_UINT_IN_POINTER(hash));
if (material == NULL) {
material = MEM_mallocN(sizeof(WORKBENCH_MaterialData), "WORKBENCH_MaterialData");
@@ -75,14 +77,15 @@ WORKBENCH_MaterialData* workbench_get_or_create_solid_flat_material_data(WORKBEN
return material;
}
-WORKBENCH_MaterialData* workbench_get_or_create_solid_studio_material_data(WORKBENCH_Data *vedata, const float color[3]) {
+WORKBENCH_MaterialData *workbench_get_or_create_solid_studio_material_data(WORKBENCH_Data *vedata, const float color[3])
+{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PassList *psl = vedata->psl;
- WORKBENCH_PrivateData* wpd = stl->g_data;
-
+ WORKBENCH_PrivateData *wpd = stl->g_data;
+
uint hash = get_material_hash(color);
WORKBENCH_MaterialData *material;
-
+
material = BLI_ghash_lookup(wpd->material_hash, SET_UINT_IN_POINTER(hash));
if (material == NULL) {
material = MEM_mallocN(sizeof(WORKBENCH_MaterialData), "WORKBENCH_MaterialData");
@@ -96,7 +99,8 @@ WORKBENCH_MaterialData* workbench_get_or_create_solid_studio_material_data(WORKB
return material;
}
-void workbench_materials_engine_init(void) {
+void workbench_materials_engine_init(void)
+{
if (!e_data.depth_sh) {
/* Depth pass */
e_data.depth_sh = DRW_shader_create_3D_depth_only();
@@ -107,22 +111,25 @@ void workbench_materials_engine_init(void) {
}
}
-void workbench_materials_engine_finish(void) {
+void workbench_materials_engine_finish(void)
+{
DRW_SHADER_FREE_SAFE(e_data.solid_flat_sh);
DRW_SHADER_FREE_SAFE(e_data.solid_studio_sh);
}
-void workbench_materials_cache_init(WORKBENCH_Data *vedata) {
- WORKBENCH_StorageList* stl = vedata->stl;
- WORKBENCH_PassList* psl = vedata->psl;
- WORKBENCH_PrivateData* wpd = stl->g_data;
-
+void workbench_materials_cache_init(WORKBENCH_Data *vedata)
+{
+ WORKBENCH_StorageList *stl = vedata->stl;
+ WORKBENCH_PassList *psl = vedata->psl;
+ WORKBENCH_PrivateData *wpd = stl->g_data;
+
wpd->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
wpd->material_hash = BLI_ghash_ptr_new("Workbench material_hash");
}
-void workbench_materials_cache_finish(WORKBENCH_Data *vedata) {
- WORKBENCH_StorageList* stl = vedata->stl;
- WORKBENCH_PrivateData* wpd = stl->g_data;
+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);
}