mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 18:05:35 +00:00
gpu,gpu/gl: implement shader uniform buffers
Emulate them for the OpenGL ES backend because 2.0 doesn't support uniform buffers. The future d3d backend only supports uniform (constant) buffers. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -10,7 +10,7 @@ layout(binding = 0) uniform Block {
|
||||
vec2 offset;
|
||||
vec2 uvScale;
|
||||
vec2 uvOffset;
|
||||
} uniforms;
|
||||
};
|
||||
|
||||
layout(location = 0) in vec2 pos;
|
||||
|
||||
@@ -20,8 +20,8 @@ layout(location = 0) out vec2 vUV;
|
||||
|
||||
void main() {
|
||||
vec2 p = pos;
|
||||
p *= uniforms.scale;
|
||||
p += uniforms.offset;
|
||||
gl_Position = vec4(p, uniforms.z, 1);
|
||||
vUV = uv*uniforms.uvScale + uniforms.uvOffset;
|
||||
p *= scale;
|
||||
p += offset;
|
||||
gl_Position = vec4(p, z, 1);
|
||||
vUV = uv*uvScale + uvOffset;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
#version 310 es
|
||||
|
||||
void blah() {
|
||||
}
|
||||
@@ -8,11 +8,11 @@ layout(binding = 0) uniform Block {
|
||||
float z;
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec2 uvScale;
|
||||
vec2 uvOffset;
|
||||
vec2 uvCoverScale;
|
||||
vec2 uvCoverOffset;
|
||||
} uniforms;
|
||||
vec2 uvScale;
|
||||
vec2 uvOffset;
|
||||
};
|
||||
|
||||
layout(location = 0) in vec2 pos;
|
||||
|
||||
@@ -22,7 +22,7 @@ layout(location = 1) in vec2 uv;
|
||||
layout(location = 1) out vec2 vUV;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(pos*uniforms.scale + uniforms.offset, uniforms.z, 1);
|
||||
vUV = uv*uniforms.uvScale + uniforms.uvOffset;
|
||||
vCoverUV = uv*uniforms.uvCoverScale+uniforms.uvCoverOffset;
|
||||
gl_Position = vec4(pos*scale + offset, z, 1);
|
||||
vUV = uv*uvScale + uvOffset;
|
||||
vCoverUV = uv*uvCoverScale+uvCoverOffset;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ layout(location = 1) in vec2 uv;
|
||||
layout(binding = 0) uniform Block {
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
} uvparams;
|
||||
};
|
||||
|
||||
layout(location = 0) out vec2 vUV;
|
||||
|
||||
@@ -18,5 +18,5 @@ void main() {
|
||||
vec2 p = pos;
|
||||
p.y = -p.y;
|
||||
gl_Position = vec4(p, 0, 1);
|
||||
vUV = uv*uvparams.scale + uvparams.offset;
|
||||
vUV = uv*scale + offset;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ layout(binding = 0) uniform Block {
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec2 pathOffset;
|
||||
} uniforms;
|
||||
};
|
||||
|
||||
layout(location=0) in vec2 corner;
|
||||
layout(location=1) in float maxy;
|
||||
@@ -24,10 +24,10 @@ void main() {
|
||||
// Add a one pixel overlap so curve quads cover their
|
||||
// entire curves. Could use conservative rasterization
|
||||
// if available.
|
||||
vec2 from = from + uniforms.pathOffset;
|
||||
vec2 ctrl = ctrl + uniforms.pathOffset;
|
||||
vec2 to = to + uniforms.pathOffset;
|
||||
float maxy = maxy + uniforms.pathOffset.y;
|
||||
vec2 from = from + pathOffset;
|
||||
vec2 ctrl = ctrl + pathOffset;
|
||||
vec2 to = to + pathOffset;
|
||||
float maxy = maxy + pathOffset.y;
|
||||
vec2 pos;
|
||||
if (corner.x > 0.0) {
|
||||
// East.
|
||||
@@ -46,8 +46,8 @@ void main() {
|
||||
vFrom = from-pos;
|
||||
vCtrl = ctrl-pos;
|
||||
vTo = to-pos;
|
||||
pos *= uniforms.scale;
|
||||
pos += uniforms.offset;
|
||||
pos *= scale;
|
||||
pos += offset;
|
||||
gl_Position = vec4(pos, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user