Files
test/source/blender/draw/intern/draw_cache.hh
Casey Bianco-Davis dfeeaa98fd Grease Pencil: Use Curve overlay for Bezier handles
This makes it so that Grease Pencil Bezier handles use the same colors and shaders as `Curves` Objects.

This also makes the handles follow `handle_display` and add the option the the edit mode overlay.

Pull Request: https://projects.blender.org/blender/blender/pulls/141524
2025-08-02 15:37:59 +02:00

163 lines
5.7 KiB
C++

/* SPDX-FileCopyrightText: 2016 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup draw
*/
#pragma once
#include "BLI_math_matrix_types.hh"
#include "BLI_span.hh"
#include "BKE_volume_grid_fwd.hh"
struct GPUMaterial;
namespace blender::gpu {
class Texture;
class Batch;
class VertBuf;
} // namespace blender::gpu
struct ModifierData;
struct Object;
struct PTCacheEdit;
struct ParticleSystem;
struct Volume;
struct Scene;
namespace blender::draw {
/**
* Shape resolution level of detail.
*/
enum eDRWLevelOfDetail {
DRW_LOD_LOW = 0,
DRW_LOD_MEDIUM = 1,
DRW_LOD_HIGH = 2,
DRW_LOD_MAX, /* Max number of level of detail */
};
/* Common Object */
gpu::Batch *DRW_cache_object_all_edges_get(Object *ob);
gpu::Batch *DRW_cache_object_edge_detection_get(Object *ob, bool *r_is_manifold);
gpu::Batch *DRW_cache_object_surface_get(Object *ob);
gpu::Batch *DRW_cache_object_loose_edges_get(Object *ob);
Span<gpu::Batch *> DRW_cache_object_surface_material_get(Object *ob,
Span<const GPUMaterial *> materials);
gpu::Batch *DRW_cache_object_face_wireframe_get(const Scene *scene, Object *ob);
/* Meshes */
gpu::Batch *DRW_cache_mesh_all_verts_get(Object *ob);
gpu::Batch *DRW_cache_mesh_paint_overlay_verts_get(Object *ob);
gpu::Batch *DRW_cache_mesh_all_edges_get(Object *ob);
gpu::Batch *DRW_cache_mesh_loose_edges_get(Object *ob);
gpu::Batch *DRW_cache_mesh_edge_detection_get(Object *ob, bool *r_is_manifold);
gpu::Batch *DRW_cache_mesh_surface_get(Object *ob);
gpu::Batch *DRW_cache_mesh_paint_overlay_surface_get(Object *ob);
gpu::Batch *DRW_cache_mesh_paint_overlay_edges_get(Object *ob);
/**
* Return list of batches with length equal to `max(1, totcol)`.
*/
Span<gpu::Batch *> DRW_cache_mesh_surface_shaded_get(Object *ob,
Span<const GPUMaterial *> materials);
/**
* Return list of batches with length equal to `max(1, totcol)`.
*/
Span<gpu::Batch *> DRW_cache_mesh_surface_texpaint_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_texpaint_single_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_vertpaint_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_sculptcolors_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_weights_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_mesh_analysis_get(Object *ob);
gpu::Batch *DRW_cache_mesh_face_wireframe_get(Object *ob);
gpu::Batch *DRW_cache_mesh_surface_viewer_attribute_get(Object *ob);
/* Curve */
gpu::Batch *DRW_cache_curve_edge_wire_get(Object *ob);
gpu::Batch *DRW_cache_curve_edge_wire_viewer_attribute_get(Object *ob);
/* edit-mode */
gpu::Batch *DRW_cache_curve_edge_normal_get(Object *ob);
gpu::Batch *DRW_cache_curve_edge_overlay_get(Object *ob);
gpu::Batch *DRW_cache_curve_vert_overlay_get(Object *ob);
/* Font */
gpu::Batch *DRW_cache_text_edge_wire_get(Object *ob);
/* Surface */
gpu::Batch *DRW_cache_surf_edge_wire_get(Object *ob);
/* Lattice */
gpu::Batch *DRW_cache_lattice_verts_get(Object *ob);
gpu::Batch *DRW_cache_lattice_wire_get(Object *ob, bool use_weight);
gpu::Batch *DRW_cache_lattice_vert_overlay_get(Object *ob);
/* Point Cloud */
gpu::Batch *DRW_cache_pointcloud_vert_overlay_get(Object *ob);
/* Particles */
gpu::Batch *DRW_cache_particles_get_hair(Object *object, ParticleSystem *psys, ModifierData *md);
gpu::Batch *DRW_cache_particles_get_dots(Object *object, ParticleSystem *psys);
gpu::Batch *DRW_cache_particles_get_edit_strands(Object *object,
ParticleSystem *psys,
PTCacheEdit *edit,
bool use_weight);
gpu::Batch *DRW_cache_particles_get_edit_inner_points(Object *object,
ParticleSystem *psys,
PTCacheEdit *edit);
gpu::Batch *DRW_cache_particles_get_edit_tip_points(Object *object,
ParticleSystem *psys,
PTCacheEdit *edit);
/* Volume */
struct DRWVolumeGrid {
DRWVolumeGrid *next, *prev;
/* Grid name. */
char *name;
/* 3D texture. */
gpu::Texture *texture;
/* Transform between 0..1 texture space and object space. */
float4x4 texture_to_object;
float4x4 object_to_texture;
/* Transform from bounds to texture space. */
float4x4 object_to_bounds;
float4x4 bounds_to_texture;
};
DRWVolumeGrid *DRW_volume_batch_cache_get_grid(Volume *volume,
const bke::VolumeGridData *volume_grid);
gpu::Batch *DRW_cache_volume_face_wireframe_get(Object *ob);
gpu::Batch *DRW_cache_volume_selection_surface_get(Object *ob);
/* Grease Pencil */
/* When there's no visible drawings in this grease pencil object, the returned `Batch` could be
* nullptr as `grease_pencil_edit_batch_ensure` won't do anything in those cases. */
gpu::Batch *DRW_cache_grease_pencil_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_edit_points_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_edit_lines_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_edit_handles_get(const Scene *scene, Object *ob);
gpu::VertBuf *DRW_cache_grease_pencil_position_buffer_get(const Scene *scene, Object *ob);
gpu::VertBuf *DRW_cache_grease_pencil_color_buffer_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_weight_points_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_weight_lines_get(const Scene *scene, Object *ob);
gpu::Batch *DRW_cache_grease_pencil_face_wireframe_get(const Scene *scene, Object *ob);
} // namespace blender::draw