Add some OpenGL ES 2.0 shaders for direct rendering, untested
This commit is contained in:
parent
57ebbf8281
commit
ebeaf119ba
|
@ -0,0 +1,21 @@
|
||||||
|
// pathfinder/shaders/gles2/common.inc.glsl
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017 Mozilla Foundation
|
||||||
|
|
||||||
|
#define MAX_PATHS 65536
|
||||||
|
|
||||||
|
vec2 transformVertexPosition(vec2 position, mat4 transform) {
|
||||||
|
return (transform * vec4(position, 0.0, 1.0)).xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 convertScreenToClipSpace(vec2 position, ivec2 framebufferSize) {
|
||||||
|
return position / vec2(framebufferSize) * 2.0 - 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float convertPathIndexToDepthValue(int pathIndex) {
|
||||||
|
return float(pathIndex + 1) / float(MAX_PATHS);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 fetchFloat4Data(sampler2D dataTexture, int index, ivec2 dimensions) {
|
||||||
|
return texture2D(dataTexture, (float(index) + 0.5) / vec2(dimensions));
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
// pathfinder/shaders/gles2/direct-curve.fs.glsl
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017 Mozilla Foundation
|
||||||
|
|
||||||
|
// This shader implements the quadratic Loop-Blinn formulation without writing precise depth.
|
||||||
|
// It is therefore unsuitable for ECAA, but it's fast (specifically, preserving early Z) and
|
||||||
|
// compatible with OpenGL ES 2.0.
|
||||||
|
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
varying vec2 vTexCoord;
|
||||||
|
varying float vSign;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
float side = vTexCoord.x * vTexCoord.x - vTexCoord.y;
|
||||||
|
float alpha = float(sign(side) == sign(vSign));
|
||||||
|
gl_FragColor = vec4(vColor.rgb, vColor.a * alpha);
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
// pathfinder/shaders/gles2/direct-curve.vs.glsl
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017 Mozilla Foundation
|
||||||
|
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
uniform mat4 uTransform;
|
||||||
|
uniform ivec2 uFramebufferSize;
|
||||||
|
uniform ivec2 uPathColorsDimensions;
|
||||||
|
uniform sampler2D uPathColors;
|
||||||
|
|
||||||
|
attribute vec2 aPosition;
|
||||||
|
attribute ivec2 aTexCoord;
|
||||||
|
attribute int aKind;
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
varying vec2 vTexCoord;
|
||||||
|
varying float vSign;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 position = transformVertexPosition(aPosition, uTransform);
|
||||||
|
position = convertScreenToClipSpace(position, uFramebufferSize);
|
||||||
|
float depth = convertPathIndexToDepthValue(aPathIndex);
|
||||||
|
gl_Position = vec4(position, depth, 1.0);
|
||||||
|
|
||||||
|
vColor = fetchFloat4Data(uPathColors, aPathIndex, uPathColorsDimensions);
|
||||||
|
vTexCoord = vec2(aTexCoord) / 2.0;
|
||||||
|
|
||||||
|
switch (aKind) {
|
||||||
|
case PF_B_VERTEX_KIND_CONVEX_CONTROL_POINT:
|
||||||
|
vSign = -1.0;
|
||||||
|
break;
|
||||||
|
case PF_B_VERTEX_KIND_CONCAVE_CONTROL_POINT:
|
||||||
|
vSign = 1.0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vSign = 0.0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
// pathfinder/shaders/gles2/direct-interior.fs.glsl
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017 Mozilla Foundation
|
||||||
|
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_FragColor = vColor;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
// pathfinder/shaders/gles2/direct-interior.vs.glsl
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017 Mozilla Foundation
|
||||||
|
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
uniform mat4 uTransform;
|
||||||
|
uniform ivec2 uFramebufferSize;
|
||||||
|
uniform int uMaxTextureSize;
|
||||||
|
uniform ivec2 uPathColorsDimensions;
|
||||||
|
uniform sampler2D uPathColors;
|
||||||
|
|
||||||
|
attribute vec2 aPosition;
|
||||||
|
attribute int aPathIndex;
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 position = transformVertexPosition(aPosition, uTransform);
|
||||||
|
position = convertScreenToClipSpace(position, uFramebufferSize);
|
||||||
|
float depth = convertPathIndexToDepthValue(aPathIndex);
|
||||||
|
gl_Position = vec4(position, depth, 1.0);
|
||||||
|
|
||||||
|
vColor = fetchFloat4Data(uPathColors, aPathIndex, uPathColorsDimensions);
|
||||||
|
}
|
Loading…
Reference in New Issue