Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/workbench_transparent.c
| Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | GPU_framebuffer_ensure_config(&fbl->transp_accum_fb, | ||||
| GPU_ATTACHMENT_TEXTURE(wpd->accum_buffer_tx), | GPU_ATTACHMENT_TEXTURE(wpd->accum_buffer_tx), | ||||
| GPU_ATTACHMENT_TEXTURE(wpd->reveal_buffer_tx), | GPU_ATTACHMENT_TEXTURE(wpd->reveal_buffer_tx), | ||||
| }); | }); | ||||
| } | } | ||||
| static void workbench_transparent_lighting_uniforms(WORKBENCH_PrivateData *wpd, | static void workbench_transparent_lighting_uniforms(WORKBENCH_PrivateData *wpd, | ||||
| DRWShadingGroup *grp) | DRWShadingGroup *grp) | ||||
| { | { | ||||
| DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo); | DRW_shgroup_uniform_block(grp, "world_data", wpd->world_ubo); | ||||
| DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", false); | DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", false); | ||||
| if (STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd)) { | if (STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd)) { | ||||
| BKE_studiolight_ensure_flag(wpd->studio_light, | BKE_studiolight_ensure_flag(wpd->studio_light, | ||||
| STUDIOLIGHT_MATCAP_DIFFUSE_GPUTEXTURE | | STUDIOLIGHT_MATCAP_DIFFUSE_GPUTEXTURE | | ||||
| STUDIOLIGHT_MATCAP_SPECULAR_GPUTEXTURE); | STUDIOLIGHT_MATCAP_SPECULAR_GPUTEXTURE); | ||||
| struct GPUTexture *diff_tx = wpd->studio_light->matcap_diffuse.gputexture; | struct GPUTexture *diff_tx = wpd->studio_light->matcap_diffuse.gputexture; | ||||
| struct GPUTexture *spec_tx = wpd->studio_light->matcap_specular.gputexture; | struct GPUTexture *spec_tx = wpd->studio_light->matcap_specular.gputexture; | ||||
| const bool use_spec = workbench_is_specular_highlight_enabled(wpd); | const bool use_spec = workbench_is_specular_highlight_enabled(wpd); | ||||
| spec_tx = (use_spec && spec_tx) ? spec_tx : diff_tx; | spec_tx = (use_spec && spec_tx) ? spec_tx : diff_tx; | ||||
| DRW_shgroup_uniform_texture(grp, "matcapDiffuseImage", diff_tx); | DRW_shgroup_uniform_texture(grp, "matcap_diffuse_tx", diff_tx); | ||||
| DRW_shgroup_uniform_texture(grp, "matcapSpecularImage", spec_tx); | DRW_shgroup_uniform_texture(grp, "matcap_specular_tx", spec_tx); | ||||
| } | } | ||||
| } | } | ||||
| void workbench_transparent_cache_init(WORKBENCH_Data *vedata) | void workbench_transparent_cache_init(WORKBENCH_Data *vedata) | ||||
| { | { | ||||
| WORKBENCH_PassList *psl = vedata->psl; | WORKBENCH_PassList *psl = vedata->psl; | ||||
| WORKBENCH_PrivateData *wpd = vedata->stl->wpd; | WORKBENCH_PrivateData *wpd = vedata->stl->wpd; | ||||
| struct GPUShader *sh; | struct GPUShader *sh; | ||||
| Show All 17 Lines | for (int infront = 0; infront < 2; infront++) { | ||||
| } | } | ||||
| for (eWORKBENCH_DataType data = 0; data < WORKBENCH_DATATYPE_MAX; data++) { | for (eWORKBENCH_DataType data = 0; data < WORKBENCH_DATATYPE_MAX; data++) { | ||||
| wpd->prepass[transp][infront][data].material_hash = BLI_ghash_ptr_new(__func__); | wpd->prepass[transp][infront][data].material_hash = BLI_ghash_ptr_new(__func__); | ||||
| sh = workbench_shader_transparent_get(wpd, data); | sh = workbench_shader_transparent_get(wpd, data); | ||||
| wpd->prepass[transp][infront][data].common_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[transp][infront][data].common_shgrp = grp = DRW_shgroup_create(sh, pass); | ||||
| DRW_shgroup_uniform_block(grp, "material_block", wpd->material_ubo_curr); | DRW_shgroup_uniform_block(grp, "materials_data", wpd->material_ubo_curr); | ||||
| DRW_shgroup_uniform_int_copy(grp, "materialIndex", -1); | DRW_shgroup_uniform_int_copy(grp, "materialIndex", -1); | ||||
| workbench_transparent_lighting_uniforms(wpd, grp); | workbench_transparent_lighting_uniforms(wpd, grp); | ||||
| wpd->prepass[transp][infront][data].vcol_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[transp][infront][data].vcol_shgrp = grp = DRW_shgroup_create(sh, pass); | ||||
| DRW_shgroup_uniform_block(grp, "material_block", wpd->material_ubo_curr); | DRW_shgroup_uniform_block(grp, "materials_data", wpd->material_ubo_curr); | ||||
| DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. (uses vcol) */ | DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. (uses vcol) */ | ||||
| sh = workbench_shader_transparent_image_get(wpd, data, false); | sh = workbench_shader_transparent_image_get(wpd, data, false); | ||||
| wpd->prepass[transp][infront][data].image_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[transp][infront][data].image_shgrp = grp = DRW_shgroup_create(sh, pass); | ||||
| DRW_shgroup_uniform_block(grp, "material_block", wpd->material_ubo_curr); | DRW_shgroup_uniform_block(grp, "materials_data", wpd->material_ubo_curr); | ||||
| DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. */ | DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. */ | ||||
| workbench_transparent_lighting_uniforms(wpd, grp); | workbench_transparent_lighting_uniforms(wpd, grp); | ||||
| sh = workbench_shader_transparent_image_get(wpd, data, true); | sh = workbench_shader_transparent_image_get(wpd, data, true); | ||||
| wpd->prepass[transp][infront][data].image_tiled_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[transp][infront][data].image_tiled_shgrp = grp = DRW_shgroup_create(sh, pass); | ||||
| DRW_shgroup_uniform_block(grp, "material_block", wpd->material_ubo_curr); | DRW_shgroup_uniform_block(grp, "materials_data", wpd->material_ubo_curr); | ||||
| DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. */ | DRW_shgroup_uniform_int_copy(grp, "materialIndex", 0); /* Default material. */ | ||||
| workbench_transparent_lighting_uniforms(wpd, grp); | workbench_transparent_lighting_uniforms(wpd, grp); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| { | { | ||||
| DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; | DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; | ||||
| Show All 35 Lines | |||||