Merge branch 'blender-v4.1-release'

This commit is contained in:
Brecht Van Lommel 2024-03-20 15:49:15 +01:00
commit dc34e96dc4
3 changed files with 23 additions and 9 deletions

View file

@ -2,7 +2,7 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#ifdef USE_GEOMETRY_SHADER
#if defined(USE_GEOMETRY_SHADER) || defined(USE_GEOMETRY_IFACE_COLOR)
vec4 fragment_in_color()
{
return geometry_out.mColor;

View file

@ -97,13 +97,13 @@ bool is_equal(vec4 p1, vec4 p2)
geometry_out.mTexCoord = vec2(0, 0); \
geometry_out.mColor = finalColor[1]; \
gl_Position = vec4( \
(sp1 + finalThickness[2] * n0) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
(sp1 + finalThickness[1] * n0) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
#define V1_a \
geometry_out.mTexCoord = vec2(0, 0); \
geometry_out.mColor = finalColor[1]; \
gl_Position = vec4( \
(sp1 + finalThickness[2] * n1) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
(sp1 + finalThickness[1] * n1) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
#define V2_a \
geometry_out.mTexCoord = vec2(0, 0.5); \
@ -114,12 +114,12 @@ bool is_equal(vec4 p1, vec4 p2)
geometry_out.mTexCoord = vec2(0, 1); \
geometry_out.mColor = finalColor[1]; \
gl_Position = vec4( \
(sp1 - finalThickness[2] * n1) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
(sp1 - finalThickness[1] * n1) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
#define V1_b \
geometry_out.mTexCoord = vec2(0, 1); \
geometry_out.mColor = finalColor[1]; \
gl_Position = vec4( \
(sp1 - finalThickness[2] * n0) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
(sp1 - finalThickness[1] * n0) / gpencil_stroke_data.viewport, getZdepth(P1), 1.0);
#define V2_b \
geometry_out.mTexCoord = vec2(0, 0.5); \
@ -197,6 +197,11 @@ bool is_equal(vec4 p1, vec4 p2)
vec2 svn2 = normalize(sp2 - sp1) * length_b * 4.0 * extend; \
gl_Position = vec4((sp2 + svn2) / gpencil_stroke_data.viewport, getZdepth(P2), 1.0);
vec4 uchar4_to_normalized_vec4(uchar4 udata)
{
return vec4(udata) / vec4(255.0f);
}
void main(void)
{
/* Determine output geometry IDs. */
@ -215,7 +220,9 @@ void main(void)
for (int i = 0; i < 4; i++) {
finalPos[i] = ModelViewProjectionMatrix *
vec4(vertex_fetch_attribute(input_prim_id + i, pos, vec3).xyz, 1.0);
finalColor[i] = vertex_fetch_attribute(input_prim_id + i, color, vec4);
/* Color attribute uses GPU_FETCH_INT_TO_FLOAT_UNIT with GPU_COMP_U8. */
finalColor[i] = uchar4_to_normalized_vec4(
vertex_fetch_attribute(input_prim_id + i, color, uchar4));
float in_thickness = vertex_fetch_attribute(input_prim_id + i, thickness, float);
if (gpencil_stroke_data.keep_size) {
@ -223,7 +230,7 @@ void main(void)
}
else {
float size = (ProjectionMatrix[3][3] == 0.0) ?
(in_thickness / (gl_Position.z * defaultpixsize)) :
(in_thickness / (finalPos[i].z * defaultpixsize)) :
(in_thickness / defaultpixsize);
finalThickness[i] = max(size * gpencil_stroke_data.objscale, 1.0);
}
@ -296,8 +303,14 @@ void main(void)
}
/** Geometry output. */
/* First triangle (T0). prevent excessively long miters at sharp
* corners */
/* prevent excessively long miters at sharp corners */
if (dot(v0, v1) < -MiterLimit) {
miter_a = n1;
length_a = finalThickness[1];
}
/* First triangle (T0). */
if (output_prim_triangle_id == 0) {
if (dot(v0, v1) < -MiterLimit) {
if (dot(v0, n1) > 0) {

View file

@ -39,6 +39,7 @@ GPU_SHADER_CREATE_INFO(gpu_shader_gpencil_stroke)
GPU_SHADER_CREATE_INFO(gpu_shader_gpencil_stroke_no_geom)
.metal_backend_only(true)
.define("USE_GEOMETRY_IFACE_COLOR")
.additional_info("gpu_shader_gpencil_stroke_base")
.vertex_out(gpencil_stroke_geom_iface)
.vertex_source("gpu_shader_gpencil_stroke_vert_no_geom.glsl")