Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_shader.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_shader.c149
1 files changed, 149 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index e3cb052890b..4530d6e8adf 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -70,6 +70,15 @@ extern char datatoc_edit_mesh_analysis_vert_glsl[];
extern char datatoc_edit_mesh_analysis_frag_glsl[];
extern char datatoc_edit_particle_strand_vert_glsl[];
extern char datatoc_edit_particle_point_vert_glsl[];
+extern char datatoc_edit_uv_verts_vert_glsl[];
+extern char datatoc_edit_uv_verts_frag_glsl[];
+extern char datatoc_edit_uv_edges_vert_glsl[];
+extern char datatoc_edit_uv_edges_geom_glsl[];
+extern char datatoc_edit_uv_edges_frag_glsl[];
+extern char datatoc_edit_uv_faces_vert_glsl[];
+extern char datatoc_edit_uv_face_dots_vert_glsl[];
+extern char datatoc_edit_uv_stretching_vert_glsl[];
+extern char datatoc_edit_uv_tiled_image_borders_vert_glsl[];
extern char datatoc_extra_frag_glsl[];
extern char datatoc_extra_vert_glsl[];
extern char datatoc_extra_groundline_vert_glsl[];
@@ -113,6 +122,7 @@ extern char datatoc_xray_fade_frag_glsl[];
extern char datatoc_gpu_shader_depth_only_frag_glsl[];
extern char datatoc_gpu_shader_point_varying_color_frag_glsl[];
extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
+extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[];
extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
extern char datatoc_gpu_shader_flat_color_frag_glsl[];
extern char datatoc_gpu_shader_point_varying_color_varying_outline_aa_frag_glsl[];
@@ -120,6 +130,7 @@ extern char datatoc_gpu_shader_common_obinfos_lib_glsl[];
extern char datatoc_gpencil_common_lib_glsl[];
+extern char datatoc_common_overlay_lib_glsl[];
extern char datatoc_common_colormanagement_lib_glsl[];
extern char datatoc_common_fullscreen_vert_glsl[];
extern char datatoc_common_fxaa_lib_glsl[];
@@ -164,6 +175,13 @@ typedef struct OVERLAY_Shaders {
GPUShader *edit_mesh_analysis;
GPUShader *edit_particle_strand;
GPUShader *edit_particle_point;
+ GPUShader *edit_uv_verts;
+ GPUShader *edit_uv_faces;
+ GPUShader *edit_uv_edges;
+ GPUShader *edit_uv_face_dots;
+ GPUShader *edit_uv_stretching_angle;
+ GPUShader *edit_uv_stretching_area;
+ GPUShader *edit_uv_tiled_image_borders;
GPUShader *extra;
GPUShader *extra_select;
GPUShader *extra_groundline;
@@ -175,6 +193,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *facing;
GPUShader *gpencil_canvas;
GPUShader *grid;
+ GPUShader *grid_image;
GPUShader *image;
GPUShader *motion_path_line;
GPUShader *motion_path_vert;
@@ -203,8 +222,20 @@ typedef struct OVERLAY_Shaders {
static struct {
OVERLAY_Shaders sh_data[GPU_SHADER_CFG_LEN];
+ DRWShaderLibrary *lib;
} e_data = {{{NULL}}};
+void OVERLAY_shader_library_ensure(void)
+{
+ if (e_data.lib == NULL) {
+ e_data.lib = DRW_shader_library_create();
+ /* NOTE: Theses needs to be ordered by dependencies. */
+ DRW_SHADER_LIB_ADD(e_data.lib, common_globals_lib);
+ DRW_SHADER_LIB_ADD(e_data.lib, common_overlay_lib);
+ DRW_SHADER_LIB_ADD(e_data.lib, common_view_lib);
+ }
+}
+
GPUShader *OVERLAY_shader_antialiasing(void)
{
OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
@@ -1012,6 +1043,20 @@ GPUShader *OVERLAY_shader_grid(void)
return sh_data->grid;
}
+GPUShader *OVERLAY_shader_grid_image(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->grid_image) {
+ sh_data->grid_image = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_tiled_image_borders_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_uniform_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n");
+ }
+ return sh_data->grid_image;
+}
+
GPUShader *OVERLAY_shader_image(void)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -1449,6 +1494,108 @@ GPUShader *OVERLAY_shader_xray_fade(void)
return sh_data->xray_fade;
}
+/* -------------------------------------------------------------------- */
+/** \name Edit UV shaders
+ * \{ */
+
+GPUShader *OVERLAY_shader_edit_uv_edges_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_edges) {
+ sh_data->edit_uv_edges = DRW_shader_create_with_shaderlib(datatoc_edit_uv_edges_vert_glsl,
+ datatoc_edit_uv_edges_geom_glsl,
+ datatoc_edit_uv_edges_frag_glsl,
+ e_data.lib,
+ NULL);
+ }
+ return sh_data->edit_uv_edges;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_face_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_faces) {
+ sh_data->edit_uv_faces = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_faces_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n");
+ }
+ return sh_data->edit_uv_faces;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_face_dots_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_face_dots) {
+ sh_data->edit_uv_face_dots = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_face_dots_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n");
+ }
+ return sh_data->edit_uv_face_dots;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_verts_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_verts) {
+ sh_data->edit_uv_verts = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_verts_vert_glsl, NULL, datatoc_edit_uv_verts_frag_glsl, e_data.lib, NULL);
+ }
+
+ return sh_data->edit_uv_verts;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_stretching_area_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_stretching_area) {
+ sh_data->edit_uv_stretching_area = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_stretching_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_2D_smooth_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n");
+ }
+
+ return sh_data->edit_uv_stretching_area;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_stretching_angle_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_stretching_angle) {
+ sh_data->edit_uv_stretching_angle = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_stretching_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_2D_smooth_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n#define STRETCH_ANGLE\n");
+ }
+
+ return sh_data->edit_uv_stretching_angle;
+}
+
+GPUShader *OVERLAY_shader_edit_uv_tiled_image_borders_get(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_tiled_image_borders) {
+ sh_data->edit_uv_tiled_image_borders = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_tiled_image_borders_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_uniform_color_frag_glsl,
+ e_data.lib,
+ "#define blender_srgb_to_framebuffer_space(a) a\n");
+ }
+ return sh_data->edit_uv_tiled_image_borders;
+}
+
+/* \} */
+
static OVERLAY_InstanceFormats g_formats = {NULL};
OVERLAY_InstanceFormats *OVERLAY_shader_instance_formats_get(void)
@@ -1521,6 +1668,8 @@ OVERLAY_InstanceFormats *OVERLAY_shader_instance_formats_get(void)
void OVERLAY_shader_free(void)
{
+ DRW_SHADER_LIB_FREE_SAFE(e_data.lib);
+
for (int sh_data_index = 0; sh_data_index < ARRAY_SIZE(e_data.sh_data); sh_data_index++) {
OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_data_index];
GPUShader **sh_data_as_array = (GPUShader **)sh_data;