Blender Kitsu: Update Render Review GPU shader code to new syntax that works on Metal #305

Merged
Sebastian Parborg merged 1 commits from tone-watson/blender-studio-pipeline:bugfix/rr-gpu-shader into main 2024-06-04 16:14:13 +02:00

View File

@ -26,35 +26,36 @@ import typing
import bpy
import gpu
from gpu_extras.batch import batch_for_shader
APPROVED_COLOR = (0.24, 1, 0.139, 0.7)
PUSHED_TO_EDIT_COLOR = (0.8, .8, 0.1, 0.5)
# Glsl.
gpu_vertex_shader = """
uniform mat4 ModelViewProjectionMatrix;
layout (location = 0) in vec2 pos;
layout (location = 1) in vec4 color;
out vec4 lineColor; // output to the fragment shader
# Shader code for "class LineDrawer"
shader_info = gpu.types.GPUShaderCreateInfo()
shader_info.push_constant('MAT4', "viewProjectionMatrix")
shader_info.push_constant('VEC4', "lineColor")
shader_info.vertex_in(0, 'VEC2', "pos")
shader_info.fragment_out(0, 'VEC4', "fragColor")
shader_info.vertex_source("""
void main()
{
gl_Position = ModelViewProjectionMatrix * vec4(pos.x, pos.y, 0.0, 1.0);
lineColor = color;
gl_Position = viewProjectionMatrix * vec4(pos.x, pos.y, 0.0, 1.0);
}
"""
)
gpu_fragment_shader = """
out vec4 fragColor;
in vec4 lineColor;
shader_info.fragment_source("""
void main()
{
fragColor = lineColor;
}
"""
)
line_drawer_shader = gpu.shader.create_from_info(shader_info)
del shader_info
Float2 = typing.Tuple[float, float]
Float3 = typing.Tuple[float, float, float]
@ -63,17 +64,6 @@ LINE_WIDTH = 6
class LineDrawer:
def __init__(self):
self._format = gpu.types.GPUVertFormat()
self._pos_id = self._format.attr_add(
id="pos", comp_type="F32", len=2, fetch_mode="FLOAT"
)
self._color_id = self._format.attr_add(
id="color", comp_type="F32", len=4, fetch_mode="FLOAT"
)
self.shader = gpu.types.GPUShader(gpu_vertex_shader, gpu_fragment_shader)
def draw(self, coords: typing.List[Float2], colors: typing.List[Float4]):
global LINE_WIDTH
@ -82,14 +72,12 @@ class LineDrawer:
gpu.state.blend_set("ALPHA")
gpu.state.line_width_set(LINE_WIDTH)
vbo = gpu.types.GPUVertBuf(len=len(coords), format=self._format)
vbo.attr_fill(id=self._pos_id, data=coords)
vbo.attr_fill(id=self._color_id, data=colors)
batch = gpu.types.GPUBatch(type="LINES", buf=vbo)
batch.program_set(self.shader)
batch.draw()
matrix = bpy.context.region_data.perspective_matrix
line_drawer_shader.uniform_float("viewProjectionMatrix", matrix)
line_drawer_shader.uniform_float("lineColor", colors[0]) # Assuming same color for all lines for simplicity
batch = batch_for_shader(line_drawer_shader, 'LINES', {"pos": coords})
batch.draw(line_drawer_shader)
def get_strip_rectf(strip) -> Float4:
# Get x and y in terms of the grid's frames and channels.