142 const bool is_select_mode = (selection_type_ != SelectionType::DISABLED);
149 const float wire_alpha =
state.overlay.bone_wire_alpha;
151 const bool use_wire_alpha = (wire_alpha < 1.0f);
164 auto &sub = armature_ps_.
sub(
"opaque.envelope_distance");
167 sub.push_constant(
"alpha", 1.0f);
168 sub.push_constant(
"isDistance",
true);
169 opaque_.envelope_distance = ⊂
171 if (use_wire_alpha) {
172 auto &sub = armature_ps_.
sub(
"transparent.envelope_distance");
175 sub.push_constant(
"alpha", wire_alpha);
176 sub.push_constant(
"isDistance",
true);
177 transparent_.envelope_distance = ⊂
180 transparent_.envelope_distance = opaque_.envelope_distance;
184 auto &sub = armature_ps_.
sub(
"opaque.degrees_of_freedom_fill");
187 sub.push_constant(
"alpha", 1.0f);
189 opaque_.degrees_of_freedom_fill = ⊂
191 if (use_wire_alpha) {
192 auto &sub = armature_ps_.
sub(
"transparent.degrees_of_freedom_fill");
195 sub.push_constant(
"alpha", wire_alpha);
197 transparent_.degrees_of_freedom_fill = ⊂
200 transparent_.degrees_of_freedom_fill = opaque_.degrees_of_freedom_fill;
210 auto &sub = armature_ps_.
sub(
"opaque.sphere_fill");
213 sub.push_constant(
"alpha", 1.0f);
214 opaque_.sphere_fill = ⊂
217 auto &sub = armature_ps_.
sub(
"transparent.sphere_fill");
219 state.clipping_plane_count);
221 sub.push_constant(
"alpha", wire_alpha * 0.4f);
222 transparent_.sphere_fill = ⊂
226 auto &sub = armature_ps_.
sub(
"opaque.shape_fill");
229 sub.push_constant(
"alpha", 1.0f);
230 opaque_.shape_fill = ⊂
233 auto &sub = armature_ps_.
sub(
"transparent.shape_fill");
235 state.clipping_plane_count);
237 sub.push_constant(
"alpha", wire_alpha * 0.6f);
238 transparent_.shape_fill = ⊂
242 auto &sub = armature_ps_.
sub(
"opaque.sphere_outline");
246 sub.push_constant(
"alpha", 1.0f);
247 opaque_.sphere_outline = ⊂
249 if (use_wire_alpha) {
250 auto &sub = armature_ps_.
sub(
"transparent.sphere_outline");
254 sub.push_constant(
"alpha", wire_alpha);
255 transparent_.sphere_outline = ⊂
258 transparent_.sphere_outline = opaque_.sphere_outline;
262 auto &sub = armature_ps_.
sub(
"opaque.shape_outline");
266 sub.push_constant(
"alpha", 1.0f);
267 opaque_.shape_outline = ⊂
269 if (use_wire_alpha) {
270 auto &sub = armature_ps_.
sub(
"transparent.shape_outline");
274 sub.bind_texture(
"depthTex", depth_tex);
275 sub.push_constant(
"alpha", wire_alpha * 0.6f);
276 sub.push_constant(
"do_smooth_wire", do_smooth_wire);
277 transparent_.shape_outline = ⊂
280 transparent_.shape_outline = opaque_.shape_outline;
284 auto &sub = armature_ps_.
sub(
"opaque.shape_wire");
288 sub.push_constant(
"alpha", 1.0f);
289 opaque_.shape_wire = ⊂
291 if (use_wire_alpha) {
292 auto &sub = armature_ps_.
sub(
"transparent.shape_wire");
296 sub.bind_texture(
"depthTex", depth_tex);
297 sub.push_constant(
"alpha", wire_alpha * 0.6f);
298 sub.push_constant(
"do_smooth_wire", do_smooth_wire);
299 transparent_.shape_wire = ⊂
302 transparent_.shape_wire = opaque_.shape_wire;
308 auto &sub = armature_ps_.
sub(
"opaque.degrees_of_freedom_wire");
310 sub.push_constant(
"alpha", 1.0f);
312 opaque_.degrees_of_freedom_wire = ⊂
314 if (use_wire_alpha) {
315 auto &sub = armature_ps_.
sub(
"transparent.degrees_of_freedom_wire");
317 sub.push_constant(
"alpha", wire_alpha);
319 transparent_.degrees_of_freedom_wire = ⊂
322 transparent_.degrees_of_freedom_wire = opaque_.degrees_of_freedom_wire;
328 auto &sub = armature_ps_.
sub(
"opaque.stick");
331 sub.push_constant(
"alpha", 1.0f);
332 opaque_.stick = ⊂
334 if (use_wire_alpha) {
335 auto &sub = armature_ps_.
sub(
"transparent.stick");
339 sub.push_constant(
"alpha", wire_alpha);
340 transparent_.stick = ⊂
343 transparent_.stick = opaque_.stick;
349 auto &sub = armature_ps_.
sub(
"opaque.envelope_fill");
352 sub.push_constant(
"isDistance",
false);
353 sub.push_constant(
"alpha", 1.0f);
354 opaque_.envelope_fill = ⊂
357 auto &sub = armature_ps_.
sub(
"transparent.envelope_fill");
360 state.clipping_plane_count);
362 sub.push_constant(
"alpha", wire_alpha * 0.6f);
363 transparent_.envelope_fill = ⊂
367 auto &sub = armature_ps_.
sub(
"opaque.envelope_outline");
371 sub.push_constant(
"alpha", 1.0f);
372 opaque_.envelope_outline = ⊂
374 if (use_wire_alpha) {
375 auto &sub = armature_ps_.
sub(
"transparent.envelope_outline");
378 state.clipping_plane_count);
381 sub.push_constant(
"alpha", wire_alpha);
382 transparent_.envelope_outline = ⊂
385 transparent_.envelope_outline = opaque_.envelope_outline;
390 auto &sub = armature_ps_.
sub(
"opaque.wire");
393 sub.push_constant(
"alpha", 1.0f);
396 if (use_wire_alpha) {
397 auto &sub = armature_ps_.
sub(
"transparent.wire");
401 sub.push_constant(
"alpha", wire_alpha);
402 transparent_.wire = ⊂
405 transparent_.wire = opaque_.wire;
410 auto &sub = armature_ps_.
sub(
"opaque.arrow");
413 opaque_.arrows = ⊂
414 transparent_.arrows = opaque_.arrows;
418 auto &sub = armature_ps_.
sub(
"opaque.relations");
421 opaque_.relations = ⊂
422 transparent_.relations = opaque_.relations;
425 auto shape_instance_bufs_begin_sync = [](BoneBuffers &bb) {
426 bb.envelope_fill_buf.
clear();
427 bb.envelope_outline_buf.clear();
428 bb.envelope_distance_buf.clear();
429 bb.bbones_fill_buf.clear();
430 bb.bbones_outline_buf.clear();
431 bb.octahedral_fill_buf.clear();
432 bb.octahedral_outline_buf.clear();
433 bb.sphere_fill_buf.clear();
434 bb.sphere_outline_buf.clear();
435 bb.stick_buf.clear();
437 bb.arrows_buf.clear();
438 bb.degrees_of_freedom_fill_buf.clear();
439 bb.degrees_of_freedom_wire_buf.clear();
440 bb.relations_buf.clear();
443 bb.custom_shape_fill.clear();
444 bb.custom_shape_outline.clear();
445 bb.custom_shape_wire.clear();
448 shape_instance_bufs_begin_sync(transparent_);
449 shape_instance_bufs_begin_sync(opaque_);
578 auto end_sync = [&](BoneBuffers &bb) {
579 bb.sphere_fill_buf.end_sync(*bb.sphere_fill, shapes.
bone_sphere.get());
580 bb.sphere_outline_buf.end_sync(*bb.sphere_outline, shapes.
bone_sphere_wire.get());
582 bb.octahedral_fill_buf.end_sync(*bb.shape_fill, shapes.
bone_octahedron.get());
583 bb.octahedral_outline_buf.end_sync(
586 bb.bbones_fill_buf.end_sync(*bb.shape_fill, shapes.
bone_box.get());
587 bb.bbones_outline_buf.end_sync(
590 bb.envelope_fill_buf.end_sync(*bb.envelope_fill, shapes.
bone_envelope.get());
591 bb.envelope_outline_buf.end_sync(*bb.envelope_outline, shapes.
bone_envelope_wire.get());
592 bb.envelope_distance_buf.end_sync(*bb.envelope_distance, shapes.
bone_envelope.get());
594 bb.stick_buf.end_sync(*bb.stick, shapes.
bone_stick.get());
596 bb.wire_buf.end_sync(*bb.wire);
598 bb.arrows_buf.end_sync(*bb.arrows, shapes.
arrows.get());
600 bb.degrees_of_freedom_fill_buf.end_sync(*bb.degrees_of_freedom_fill,
602 bb.degrees_of_freedom_wire_buf.end_sync(*bb.degrees_of_freedom_wire,
605 bb.relations_buf.end_sync(*bb.relations);
609 for (CustomShapeBuf item : bb.custom_shape_fill.items()) {
610 item.
value->end_sync(*bb.shape_fill, item.key);
612 for (CustomShapeBuf item : bb.custom_shape_outline.items()) {
613 item.value->end_sync(*bb.shape_outline, item.key,
GPU_PRIM_LINES, 1);
615 for (CustomShapeBuf item : bb.custom_shape_wire.items()) {
616 item.value->end_sync(*bb.shape_wire, item.key,
GPU_PRIM_TRIS, 2);