Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/modes/paint_weight_mode.c
| Show All 37 Lines | |||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "DEG_depsgraph_query.h" | #include "DEG_depsgraph_query.h" | ||||
| extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */ | extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */ | ||||
| extern struct GlobalsUboStorage ts; /* draw_common.c */ | extern struct GlobalsUboStorage ts; /* draw_common.c */ | ||||
| extern struct GPUTexture *globals_weight_ramp; /* draw_common.c */ | |||||
| extern char datatoc_paint_weight_vert_glsl[]; | |||||
| extern char datatoc_paint_weight_frag_glsl[]; | |||||
| extern char datatoc_paint_wire_vert_glsl[]; | extern char datatoc_paint_wire_vert_glsl[]; | ||||
| extern char datatoc_paint_wire_frag_glsl[]; | extern char datatoc_paint_wire_frag_glsl[]; | ||||
| extern char datatoc_paint_vert_frag_glsl[]; | extern char datatoc_paint_vert_frag_glsl[]; | ||||
| extern char datatoc_common_globals_lib_glsl[]; | extern char datatoc_common_globals_lib_glsl[]; | ||||
| /* *********** LISTS *********** */ | /* *********** LISTS *********** */ | ||||
| typedef struct PAINT_WEIGHT_PassList { | typedef struct PAINT_WEIGHT_PassList { | ||||
| Show All 28 Lines | |||||
| typedef struct PAINT_WEIGHT_PrivateData { | typedef struct PAINT_WEIGHT_PrivateData { | ||||
| DRWShadingGroup *fweights_shgrp; | DRWShadingGroup *fweights_shgrp; | ||||
| DRWShadingGroup *lwire_shgrp; | DRWShadingGroup *lwire_shgrp; | ||||
| DRWShadingGroup *face_shgrp; | DRWShadingGroup *face_shgrp; | ||||
| DRWShadingGroup *vert_shgrp; | DRWShadingGroup *vert_shgrp; | ||||
| } PAINT_WEIGHT_PrivateData; | } PAINT_WEIGHT_PrivateData; | ||||
| /* *********** FUNCTIONS *********** */ | /* *********** FUNCTIONS *********** */ | ||||
fclem: no need for uper case prefix if function is static | |||||
| static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata)) | static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata)) | ||||
| { | { | ||||
| if (!e_data.weight_face_shader) { | if (!e_data.weight_face_shader) { | ||||
| e_data.weight_face_shader = GPU_shader_get_builtin_shader(GPU_SHADER_MULTIPLY_AND_BLEND_PREPROCESSING); | e_data.weight_face_shader = DRW_shader_create_with_lib( | ||||
| datatoc_paint_weight_vert_glsl, NULL, | |||||
| datatoc_paint_weight_frag_glsl, | |||||
| datatoc_common_globals_lib_glsl, NULL); | |||||
Done Inline ActionsBracket style fclem: Bracket style | |||||
| } | } | ||||
| if (!e_data.wire_overlay_shader) { | if (!e_data.wire_overlay_shader) { | ||||
| e_data.wire_overlay_shader = DRW_shader_create_with_lib( | e_data.wire_overlay_shader = DRW_shader_create_with_lib( | ||||
| datatoc_paint_wire_vert_glsl, NULL, | datatoc_paint_wire_vert_glsl, NULL, | ||||
| datatoc_paint_wire_frag_glsl, | datatoc_paint_wire_frag_glsl, | ||||
| datatoc_common_globals_lib_glsl, "#define WEIGHT_MODE\n"); | datatoc_common_globals_lib_glsl, "#define WEIGHT_MODE\n"); | ||||
| } | } | ||||
| if (!e_data.face_overlay_shader) { | if (!e_data.face_overlay_shader) { | ||||
| e_data.face_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR); | e_data.face_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR); | ||||
| } | } | ||||
| if (!e_data.vert_overlay_shader) { | if (!e_data.vert_overlay_shader) { | ||||
Done Inline ActionsI'm not sure about putting it here. I would prefer to have a ramp texture common to all viewports. There is already a globals_ramp in draw_common.c. fclem: I'm not sure about putting it here. I would prefer to have a ramp texture common to all… | |||||
| e_data.vert_overlay_shader = DRW_shader_create_with_lib( | e_data.vert_overlay_shader = DRW_shader_create_with_lib( | ||||
| datatoc_paint_wire_vert_glsl, NULL, | datatoc_paint_wire_vert_glsl, NULL, | ||||
| datatoc_paint_vert_frag_glsl, | datatoc_paint_vert_frag_glsl, | ||||
| datatoc_common_globals_lib_glsl, NULL); | datatoc_common_globals_lib_glsl, NULL); | ||||
| } | } | ||||
| } | } | ||||
| static void PAINT_WEIGHT_cache_init(void *vedata) | static void PAINT_WEIGHT_cache_init(void *vedata) | ||||
| Show All 12 Lines | if (!stl->g_data) { | ||||
| /* Create a pass */ | /* Create a pass */ | ||||
| psl->weight_faces = DRW_pass_create( | psl->weight_faces = DRW_pass_create( | ||||
| "Weight Pass", | "Weight Pass", | ||||
| DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_MULTIPLY); | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_MULTIPLY); | ||||
| stl->g_data->fweights_shgrp = DRW_shgroup_create(e_data.weight_face_shader, psl->weight_faces); | stl->g_data->fweights_shgrp = DRW_shgroup_create(e_data.weight_face_shader, psl->weight_faces); | ||||
| DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "opacity", &v3d->overlay.weight_paint_mode_opacity, 1); | DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "opacity", &v3d->overlay.weight_paint_mode_opacity, 1); | ||||
| DRW_shgroup_uniform_texture(stl->g_data->fweights_shgrp, "colorramp", globals_weight_ramp); | |||||
Done Inline ActionsThere is very likely a better place to put this color buffer and its initialization code, but I don't know where it is. angavrilov: There is very likely a better place to put this color buffer and its initialization code, but I… | |||||
| DRW_shgroup_uniform_block(stl->g_data->fweights_shgrp, "globalsBlock", globals_ubo); | |||||
| } | } | ||||
| { | { | ||||
| psl->wire_overlay = DRW_pass_create( | psl->wire_overlay = DRW_pass_create( | ||||
| "Wire Pass", | "Wire Pass", | ||||
| DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL); | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL); | ||||
| stl->g_data->lwire_shgrp = DRW_shgroup_create(e_data.wire_overlay_shader, psl->wire_overlay); | stl->g_data->lwire_shgrp = DRW_shgroup_create(e_data.wire_overlay_shader, psl->wire_overlay); | ||||
| ▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | static void PAINT_WEIGHT_draw_scene(void *vedata) | ||||
| DRW_draw_pass(psl->weight_faces); | DRW_draw_pass(psl->weight_faces); | ||||
| DRW_draw_pass(psl->face_overlay); | DRW_draw_pass(psl->face_overlay); | ||||
| DRW_draw_pass(psl->wire_overlay); | DRW_draw_pass(psl->wire_overlay); | ||||
| DRW_draw_pass(psl->vert_overlay); | DRW_draw_pass(psl->vert_overlay); | ||||
| } | } | ||||
| static void PAINT_WEIGHT_engine_free(void) | static void PAINT_WEIGHT_engine_free(void) | ||||
| { | { | ||||
| DRW_SHADER_FREE_SAFE(e_data.weight_face_shader); | |||||
| DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader); | DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader); | ||||
| DRW_SHADER_FREE_SAFE(e_data.vert_overlay_shader); | DRW_SHADER_FREE_SAFE(e_data.vert_overlay_shader); | ||||
| } | } | ||||
| static const DrawEngineDataSize PAINT_WEIGHT_data_size = DRW_VIEWPORT_DATA_SIZE(PAINT_WEIGHT_Data); | static const DrawEngineDataSize PAINT_WEIGHT_data_size = DRW_VIEWPORT_DATA_SIZE(PAINT_WEIGHT_Data); | ||||
| DrawEngineType draw_engine_paint_weight_type = { | DrawEngineType draw_engine_paint_weight_type = { | ||||
| NULL, NULL, | NULL, NULL, | ||||
| Show All 12 Lines | |||||
no need for uper case prefix if function is static