Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/workbench_opaque.c
| Show First 20 Lines • Show All 82 Lines • ▼ Show 20 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[opaque][infront][data].material_hash = BLI_ghash_ptr_new(__func__); | wpd->prepass[opaque][infront][data].material_hash = BLI_ghash_ptr_new(__func__); | ||||
| sh = workbench_shader_opaque_get(wpd, data); | sh = workbench_shader_opaque_get(wpd, data); | ||||
| wpd->prepass[opaque][infront][data].common_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[opaque][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); | ||||
| DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | ||||
| wpd->prepass[opaque][infront][data].vcol_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[opaque][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) */ | ||||
| DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | ||||
| sh = workbench_shader_opaque_image_get(wpd, data, false); | sh = workbench_shader_opaque_image_get(wpd, data, false); | ||||
| wpd->prepass[opaque][infront][data].image_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[opaque][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. */ | ||||
| DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | ||||
| sh = workbench_shader_opaque_image_get(wpd, data, true); | sh = workbench_shader_opaque_image_get(wpd, data, true); | ||||
| wpd->prepass[opaque][infront][data].image_tiled_shgrp = grp = DRW_shgroup_create(sh, pass); | wpd->prepass[opaque][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. */ | ||||
| DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | DRW_shgroup_uniform_bool_copy(grp, "useMatcap", use_matcap); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| { | { | ||||
| DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_GREATER | DRW_STATE_STENCIL_EQUAL; | DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_GREATER | DRW_STATE_STENCIL_EQUAL; | ||||
| DRW_PASS_CREATE(psl->composite_ps, state); | DRW_PASS_CREATE(psl->composite_ps, state); | ||||
| sh = workbench_shader_composite_get(wpd); | sh = workbench_shader_composite_get(wpd); | ||||
| grp = DRW_shgroup_create(sh, psl->composite_ps); | grp = DRW_shgroup_create(sh, psl->composite_ps); | ||||
| DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo); | DRW_shgroup_uniform_block(grp, "world_data", wpd->world_ubo); | ||||
| DRW_shgroup_uniform_texture(grp, "materialBuffer", wpd->material_buffer_tx); | DRW_shgroup_uniform_texture(grp, "materialBuffer", wpd->material_buffer_tx); | ||||
| DRW_shgroup_uniform_texture(grp, "normalBuffer", wpd->normal_buffer_tx); | DRW_shgroup_uniform_texture(grp, "normalBuffer", wpd->normal_buffer_tx); | ||||
| DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", false); | DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", false); | ||||
| DRW_shgroup_stencil_mask(grp, 0x00); | DRW_shgroup_stencil_mask(grp, 0x00); | ||||
| 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); | ||||
| } | } | ||||
| DRW_shgroup_call_procedural_triangles(grp, NULL, 1); | DRW_shgroup_call_procedural_triangles(grp, NULL, 1); | ||||
| if (SHADOW_ENABLED(wpd)) { | if (SHADOW_ENABLED(wpd)) { | ||||
| grp = DRW_shgroup_create_sub(grp); | grp = DRW_shgroup_create_sub(grp); | ||||
| DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", true); | DRW_shgroup_uniform_bool_copy(grp, "forceShadowing", true); | ||||
| DRW_shgroup_state_disable(grp, DRW_STATE_STENCIL_EQUAL); | DRW_shgroup_state_disable(grp, DRW_STATE_STENCIL_EQUAL); | ||||
| DRW_shgroup_state_enable(grp, DRW_STATE_STENCIL_NEQUAL); | DRW_shgroup_state_enable(grp, DRW_STATE_STENCIL_NEQUAL); | ||||
| Show All 18 Lines | |||||