diff --git a/data/ofxGPUFont/shaders/DEBUG_ES3/background.frag b/data/ofxGPUFont/shaders/DEBUG_ES3/background.frag deleted file mode 100644 index 6d8baa7..0000000 --- a/data/ofxGPUFont/shaders/DEBUG_ES3/background.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 330 core - -in vec2 position; - -out vec3 color; - -void main() { - float t = (position.y + 1.0) / 2.0; - vec3 bottom = vec3(75.0, 55.0, 201.0) / 255.0; - vec3 top = vec3(0.0, 12.0, 0.0) / 255.0; - color = mix(bottom, top, t); -} diff --git a/data/ofxGPUFont/shaders/DEBUG_ES3/background.vert b/data/ofxGPUFont/shaders/DEBUG_ES3/background.vert deleted file mode 100644 index c6b01be..0000000 --- a/data/ofxGPUFont/shaders/DEBUG_ES3/background.vert +++ /dev/null @@ -1,15 +0,0 @@ -#version 330 core - -const vec2 vertices[4] = vec2[4]( - vec2(-1.0, -1.0), - vec2( 1.0, -1.0), - vec2(-1.0, 1.0), - vec2( 1.0, 1.0) -); - -out vec2 position; - -void main() { - position = vertices[gl_VertexID]; - gl_Position = vec4(vertices[gl_VertexID], 0.0, 1.0); -} diff --git a/data/ofxGPUFont/shaders/DEBUG_ES3/font.frag b/data/ofxGPUFont/shaders/ES3/font_ta.frag similarity index 100% rename from data/ofxGPUFont/shaders/DEBUG_ES3/font.frag rename to data/ofxGPUFont/shaders/ES3/font_ta.frag diff --git a/data/ofxGPUFont/shaders/DEBUG_ES3/font.vert b/data/ofxGPUFont/shaders/ES3/font_ta.vert similarity index 100% rename from data/ofxGPUFont/shaders/DEBUG_ES3/font.vert rename to data/ofxGPUFont/shaders/ES3/font_ta.vert diff --git a/data/ofxGPUFont/shaders/ES3/font.frag b/data/ofxGPUFont/shaders/ES3/font_ub.frag similarity index 78% rename from data/ofxGPUFont/shaders/ES3/font.frag rename to data/ofxGPUFont/shaders/ES3/font_ub.frag index 2bb4531..5af667f 100644 --- a/data/ofxGPUFont/shaders/ES3/font.frag +++ b/data/ofxGPUFont/shaders/ES3/font_ub.frag @@ -2,6 +2,7 @@ precision highp float; precision highp isampler2D; precision highp sampler2D; +precision highp sampler2DArray; // Based on: http://wdobbie.com/post/gpu-text-rendering-with-vector-textures/ @@ -12,12 +13,20 @@ struct Glyph { struct Curve { vec2 p0, p1, p2; }; +// CURVE_SIZE +// is the amount of vec2's in the curve +// we can hardcode this, as we can simply +// count the floats in the struct +// 6 floats => 3 vec2's +#define CURVE_SIZE 3 uniform isampler2D glyphs; -uniform sampler2D curves; +uniform sampler2DArray curves; +ivec3 curvesTextureSize; +int curveBreakPoint; +//uniform sampler2D iChannel0; //uniform vec4 color; - // Controls for debugging and exploring: // Size of the window (in pixels) used for 1-dimensional anti-aliasing along each rays. @@ -49,9 +58,14 @@ Glyph loadGlyph(int index) { Curve loadCurve(int index) { Curve result; - result.p0 = texelFetch(curves, ivec2(3*index+0, 0), 0).xy; - result.p1 = texelFetch(curves, ivec2(3*index+1, 0), 0).xy; - result.p2 = texelFetch(curves, ivec2(3*index+2, 0), 0).xy; + //int dw = curveBreakPoint; // width including dead space + int dw = curvesTextureSize[0]; + int w = dw - (dw % CURVE_SIZE); // effectual width + int ix = (index * CURVE_SIZE) % w; + int iz = ((index * CURVE_SIZE) + 2) / w; + result.p0 = texelFetch(curves, ivec3(ix+0, 0, iz), 0).xy; + result.p1 = texelFetch(curves, ivec3(ix+1, 0, iz), 0).xy; + result.p2 = texelFetch(curves, ivec3(ix+2, 0, iz), 0).xy; return result; } @@ -109,25 +123,23 @@ vec2 rotate(vec2 v) { } void main() { - //vec4 debug = texture(curves, vec2(uv.x, 0.5)); - //ivec4 debug = texture(glyphs, vec2(uv.x, 0.5)); - ////ivec4 debug = texelFetch(glyphs, ivec2(uv.x * float(textureSize(glyphs, 0).x), 0), 0); - //result = vec4(debug.rgb, 1.0); - Glyph gly = loadGlyph(bufferIndex); - result = vec4((float(gly.start) / 1883.0), (float(gly.count) / 42.0), 0.0, 1.0); - - // verify bufferIndex [x] - //result = vec4((float(bufferIndex) / 100.0), 0.0, 0.0, 1.0); - return; + curvesTextureSize = textureSize(curves, 0); + curveBreakPoint = (curvesTextureSize[0] * 2) / 3; + //int w = curvesTextureSize[0]; // 16384 / 2 = 8192 float alpha = 0.0; // Inverse of the diameter of a pixel in uv units for anti-aliasing. vec2 inverseDiameter = 1.0 / (antiAliasingWindowSize * fwidth(uv)); + vec4 c = color; + Glyph glyph = loadGlyph(bufferIndex); for (int i = 0; i < glyph.count; i++) { + //if (glyph.start + i > curveBreakPoint) { + //c = vec4(1.0,0.0,0.0,1.0); + //} Curve curve = loadCurve(glyph.start + i); vec2 p0 = curve.p0 - uv; @@ -145,7 +157,7 @@ void main() { } alpha = clamp(alpha, 0.0, 1.0); - result = color * alpha; + result = vec4(c.rgb, c.a * alpha); if (enableControlPointsVisualization) { // Visualize control points. diff --git a/data/ofxGPUFont/shaders/ES3/font.vert b/data/ofxGPUFont/shaders/ES3/font_ub.vert similarity index 100% rename from data/ofxGPUFont/shaders/ES3/font.vert rename to data/ofxGPUFont/shaders/ES3/font_ub.vert