I’m toying with some sort of plugin idea, but I’d like to know how well code works on different platforms before committing much of my to new project.
Easiest way for me, to test multiple platforms fast is to ask help from other coders.
So… it would be nice if you could copy & paste code to Krita Scripter, and test if code runs. ![]()
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import (
QOpenGLVersionProfile, QSurfaceFormat,
QOpenGLShader, QOpenGLShaderProgram)
from PyQt5.QtWidgets import QOpenGLWidget
_vertex_code = """\
#version 410 core
void main(void) {
vec2 pos;
pos = 2.0 * vec2(gl_VertexID % 2, gl_VertexID / 2) - 1.0;
gl_Position = vec4(pos.x, pos.y, 0.0, 1.0);
}"""
# https://www.shadertoy.com/view/4dsGzH
_fragment_code = """\
#version 410 core
uniform float iTime;
out vec4 out_color;
vec3 COLOR1 = vec3(0.0, 0.0, 0.3);
vec3 COLOR2 = vec3(0.5, 0.0, 0.0);
float BLOCK_WIDTH = 0.01;
void main(void) {
vec2 uv = gl_FragCoord.xy / vec2(800.0, 600.0);
vec3 final_color = vec3(1.0);
vec3 bg_color = vec3(0.0);
vec3 wave_color = vec3(0.0);
float c1 = mod(uv.x, 2.0 * BLOCK_WIDTH);
c1 = step(BLOCK_WIDTH, c1);
float c2 = mod(uv.y, 2.0 * BLOCK_WIDTH);
c2 = step(BLOCK_WIDTH, c2);
bg_color = mix(uv.x * COLOR1, uv.y * COLOR2, c1 * c2);
float wave_width = 0.01;
uv = -1.0 + 2.0 * uv;
uv.y += 0.1;
for(float i = 0.0; i < 10.0; i++) {
uv.y += (0.07 * sin(uv.x + i/7.0 + iTime));
wave_width = abs(1.0 / (150.0 * uv.y));
wave_color += vec3(wave_width * 1.9, wave_width, wave_width * 1.5);
}
final_color = bg_color + wave_color;
out_color = vec4(final_color, 1.0);
}"""
class MyViewport(QOpenGLWidget):
def initializeGL(self):
self._iTime = 0.0
context = self.context()
profile = QOpenGLVersionProfile()
profile.setVersion(4, 1)
profile.setProfile(QSurfaceFormat.CoreProfile)
self._gl = context.versionFunctions(profile)
# shader_program
vert = QOpenGLShader(QOpenGLShader.Vertex)
vert.compileSourceCode(_vertex_code)
frag = QOpenGLShader(QOpenGLShader.Fragment)
frag.compileSourceCode(_fragment_code)
self._prog = QOpenGLShaderProgram(context)
self._prog.addShader(vert)
self._prog.addShader(frag)
self._prog.link()
self._timer = QTimer(self)
self._timer.timeout.connect(self.update)
self._timer.start(int(1000.0 / 60.0))
def paintGL(self):
self._iTime += 0.01
self._prog.bind()
self._prog.setUniformValue("iTime", self._iTime)
gl = self._gl
gl.glDrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4)
def resizeGL(self, width, height):
self._gl.glViewport(0, 0, width, height)
view = MyViewport()
view.show()
End result should look something like:
/AkiR



