forked from AuroraMiddleware/gtk
gl renderer: Move work to the gradient vertex shader
No need to do this stuff once per fragment.
This commit is contained in:
parent
fdce30d3f8
commit
cef7f7f87d
@ -1,16 +1,35 @@
|
||||
// VERTEX_SHADER:
|
||||
// VERTEX_SHADER
|
||||
uniform vec2 u_start_point;
|
||||
uniform vec2 u_end_point;
|
||||
|
||||
_OUT_ vec2 startPoint;
|
||||
_OUT_ vec2 endPoint;
|
||||
_OUT_ float maxDist;
|
||||
_OUT_ vec2 gradient;
|
||||
_OUT_ float gradientLength;
|
||||
|
||||
void main() {
|
||||
gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
|
||||
|
||||
vUv = vec2(aUv.x, aUv.y);
|
||||
startPoint = (u_modelview * vec4(u_start_point, 0, 1)).xy;
|
||||
endPoint = (u_modelview * vec4(u_end_point, 0, 1)).xy;
|
||||
maxDist = length(endPoint - startPoint);
|
||||
|
||||
// Gradient direction
|
||||
gradient = endPoint - startPoint;
|
||||
gradientLength = length(gradient);
|
||||
}
|
||||
|
||||
// FRAGMENT_SHADER:
|
||||
uniform vec4 u_color_stops[8];
|
||||
uniform float u_color_offsets[8];
|
||||
uniform int u_num_color_stops;
|
||||
uniform vec2 u_start_point;
|
||||
uniform vec2 u_end_point;
|
||||
|
||||
_IN_ vec2 startPoint;
|
||||
_IN_ vec2 endPoint;
|
||||
_IN_ float maxDist;
|
||||
_IN_ vec2 gradient;
|
||||
_IN_ float gradientLength;
|
||||
|
||||
vec4 fragCoord() {
|
||||
vec4 f = gl_FragCoord;
|
||||
@ -20,17 +39,9 @@ vec4 fragCoord() {
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 startPoint = (u_modelview * vec4(u_start_point, 0, 1)).xy;
|
||||
vec2 endPoint = (u_modelview * vec4(u_end_point, 0, 1)).xy;
|
||||
float maxDist = length(endPoint - startPoint);
|
||||
|
||||
// Position relative to startPoint
|
||||
vec2 pos = fragCoord().xy - startPoint;
|
||||
|
||||
// Gradient direction
|
||||
vec2 gradient = endPoint - startPoint;
|
||||
float gradientLength = length(gradient);
|
||||
|
||||
// Current pixel, projected onto the line between the start point and the end point
|
||||
// The projection will be relative to the start point!
|
||||
vec2 proj = (dot(gradient, pos) / (gradientLength * gradientLength)) * gradient;
|
||||
|
Loading…
Reference in New Issue
Block a user