Support Blender 5.0

This commit is contained in:
akaneyu 2025-12-07 11:51:18 +09:00
parent a7d9ccf0da
commit 4fdc46460d
2 changed files with 44 additions and 50 deletions

View File

@ -18,8 +18,8 @@
bl_info = { bl_info = {
"name": "Image Editor Plus", "name": "Image Editor Plus",
"author": "akaneyu", "author": "akaneyu",
"version": (1, 10, 0), "version": (1, 11, 0),
"blender": (3, 3, 0), "blender": (4, 2, 0),
"location": "Image", "location": "Image",
"warning": "", "warning": "",
"description": "", "description": "",

View File

@ -1,5 +1,5 @@
''' '''
Copyright (C) 2020 - 2024 Akaneyu Copyright (C) 2020 - 2025 Akaneyu
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -18,15 +18,12 @@
import sys import sys
import math import math
import gpu import gpu
from gpu.shader import create_from_info
from gpu_extras.batch import batch_for_shader from gpu_extras.batch import batch_for_shader
from mathutils import Matrix, Vector from mathutils import Matrix, Vector
import numpy as np import numpy as np
default_vertex_shader = ''' default_vertex_shader = '''
uniform mat4 ModelViewProjectionMatrix;
in vec2 pos;
void main() void main()
{ {
gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0); gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0);
@ -34,10 +31,6 @@ void main()
''' '''
default_fragment_shader = ''' default_fragment_shader = '''
uniform vec4 color;
out vec4 fragColor;
void main() void main()
{ {
fragColor = color; fragColor = color;
@ -45,34 +38,18 @@ void main()
''' '''
dotted_line_vertex_shader = ''' dotted_line_vertex_shader = '''
uniform mat4 ModelViewProjectionMatrix;
in vec2 pos;
in float arcLength;
out float arcLengthOut;
void main() void main()
{ {
arcLengthOut = arcLength; arcLengthInter = arcLength;
gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0); gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0);
} }
''' '''
dotted_line_fragment_shader = ''' dotted_line_fragment_shader = '''
uniform float scale;
uniform float offset;
uniform vec4 color1;
uniform vec4 color2;
in float arcLengthOut;
out vec4 fragColor;
void main() void main()
{ {
if (step(sin((arcLengthOut + offset) * scale), 0.5) == 1) { if (step(sin((arcLengthInter + offset) * scale), 0.5) == 1) {
fragColor = color1; fragColor = color1;
} else { } else {
fragColor = color2; fragColor = color2;
@ -81,13 +58,6 @@ void main()
''' '''
image_vertex_shader = ''' image_vertex_shader = '''
uniform mat4 ModelViewProjectionMatrix;
in vec2 pos;
in vec2 texCoord;
out vec2 texCoordOut;
void main() void main()
{ {
gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0); gl_Position = ModelViewProjectionMatrix * vec4(pos, 0, 1.0);
@ -96,12 +66,6 @@ void main()
''' '''
image_fragment_shader = ''' image_fragment_shader = '''
uniform sampler2D image;
in vec2 texCoordOut;
out vec4 fragColor;
void main() void main()
{ {
fragColor = texture(image, texCoordOut); fragColor = texture(image, texCoordOut);
@ -118,18 +82,48 @@ def make_scale_matrix(scale):
class UIRenderer: class UIRenderer:
def __init__(self): def __init__(self):
self.default_shader = gpu.types.GPUShader(default_vertex_shader, default_shader_info = gpu.types.GPUShaderCreateInfo()
default_fragment_shader) default_shader_info.push_constant('MAT4', 'ModelViewProjectionMatrix')
self.default_shader_u_color = self.default_shader.uniform_from_name("color") default_shader_info.push_constant('VEC4', 'color')
default_shader_info.vertex_in(0, 'VEC2', 'pos')
default_shader_info.fragment_out(0, 'VEC4', 'fragColor')
default_shader_info.vertex_source(default_vertex_shader)
default_shader_info.fragment_source(default_fragment_shader)
self.default_shader = create_from_info(default_shader_info)
self.default_shader_u_color = self.default_shader.uniform_from_name('color')
self.dotted_line_shader = gpu.types.GPUShader(dotted_line_vertex_shader, dotted_line_shader_inter = gpu.types.GPUStageInterfaceInfo("dotted_line")
dotted_line_fragment_shader) dotted_line_shader_inter.smooth('FLOAT', "arcLengthInter")
dotted_line_shader_info = gpu.types.GPUShaderCreateInfo()
dotted_line_shader_info.push_constant('MAT4', 'ModelViewProjectionMatrix')
dotted_line_shader_info.push_constant('FLOAT', 'scale')
dotted_line_shader_info.push_constant('FLOAT', 'offset')
dotted_line_shader_info.push_constant('VEC4', 'color1')
dotted_line_shader_info.push_constant('VEC4', 'color2')
dotted_line_shader_info.vertex_in(0, 'VEC2', 'pos')
dotted_line_shader_info.vertex_in(1, 'FLOAT', 'arcLength')
dotted_line_shader_info.vertex_out(dotted_line_shader_inter)
dotted_line_shader_info.fragment_out(0, 'VEC4', 'fragColor')
dotted_line_shader_info.vertex_source(dotted_line_vertex_shader)
dotted_line_shader_info.fragment_source(dotted_line_fragment_shader)
self.dotted_line_shader = create_from_info(dotted_line_shader_info)
self.dotted_line_shader_u_color1 = self.dotted_line_shader.uniform_from_name("color1") self.dotted_line_shader_u_color1 = self.dotted_line_shader.uniform_from_name("color1")
self.dotted_line_shader_u_color2 = self.dotted_line_shader.uniform_from_name("color2") self.dotted_line_shader_u_color2 = self.dotted_line_shader.uniform_from_name("color2")
#self.image_shader = gpu.shader.from_builtin('2D_IMAGE') image_shader_inter = gpu.types.GPUStageInterfaceInfo("image_shader")
self.image_shader = gpu.types.GPUShader(image_vertex_shader, image_shader_inter.smooth('VEC2', "texCoordOut")
image_fragment_shader)
image_shader_info = gpu.types.GPUShaderCreateInfo()
image_shader_info.push_constant('MAT4', 'ModelViewProjectionMatrix')
image_shader_info.sampler(0, 'FLOAT_2D', 'image')
image_shader_info.vertex_in(0, 'VEC2', 'pos')
image_shader_info.vertex_in(1, 'VEC2', 'texCoord')
image_shader_info.vertex_out(image_shader_inter)
image_shader_info.fragment_out(0, 'VEC4', 'fragColor')
image_shader_info.vertex_source(image_vertex_shader)
image_shader_info.fragment_source(image_fragment_shader)
self.image_shader = create_from_info(image_shader_info)
def render_selection_frame(self, pos, size, rot=0, scale=(1.0, 1.0)): def render_selection_frame(self, pos, size, rot=0, scale=(1.0, 1.0)):
width, height = size[0], size[1] width, height = size[0], size[1]