add fontstash and nanovg port from heimdall

This commit is contained in:
skytrias
2022-12-20 12:17:23 +01:00
parent 0829ac30f7
commit d29423c24e
5 changed files with 6324 additions and 0 deletions

1227
vendor/fontstash/fontstash.odin vendored Normal file

File diff suppressed because it is too large Load Diff

123
vendor/nanovg/gl/frag.glsl vendored Normal file
View File

@@ -0,0 +1,123 @@
#ifdef GL_ES
#if defined(GL_FRAGMENT_PRECISION_HIGH) || defined(NANOVG_GL3)
precision highp float;
#else
precision mediump float;
#endif
#endif
#ifdef NANOVG_GL3
#ifdef USE_UNIFORMBUFFER
layout(std140) uniform frag {
mat3 scissorMat;
mat3 paintMat;
vec4 innerCol;
vec4 outerCol;
vec2 scissorExt;
vec2 scissorScale;
vec2 extent;
float radius;
float feather;
float strokeMult;
float strokeThr;
int texType;
int type;
};
#else // NANOVG_GL3 && !USE_UNIFORMBUFFER
uniform vec4 frag[UNIFORMARRAY_SIZE];
#endif
uniform sampler2D tex;
in vec2 ftcoord;
in vec2 fpos;
out vec4 outColor;
#else // !NANOVG_GL3
uniform vec4 frag[UNIFORMARRAY_SIZE];
uniform sampler2D tex;
varying vec2 ftcoord;
varying vec2 fpos;
#endif
#ifndef USE_UNIFORMBUFFER
#define scissorMat mat3(frag[0].xyz, frag[1].xyz, frag[2].xyz)
#define paintMat mat3(frag[3].xyz, frag[4].xyz, frag[5].xyz)
#define innerCol frag[6]
#define outerCol frag[7]
#define scissorExt frag[8].xy
#define scissorScale frag[8].zw
#define extent frag[9].xy
#define radius frag[9].z
#define feather frag[9].w
#define strokeMult frag[10].x
#define strokeThr frag[10].y
#define texType int(frag[10].z)
#define type int(frag[10].w)
#endif
float sdroundrect(vec2 pt, vec2 ext, float rad) {
vec2 ext2 = ext - vec2(rad,rad);
vec2 d = abs(pt) - ext2;
return min(max(d.x,d.y),0.0) + length(max(d,0.0)) - rad;
}
// Scissoring
float scissorMask(vec2 p) {
vec2 sc = (abs((scissorMat * vec3(p,1.0)).xy) - scissorExt);
sc = vec2(0.5,0.5) - sc * scissorScale;
return clamp(sc.x,0.0,1.0) * clamp(sc.y,0.0,1.0);
}
#ifdef EDGE_AA
// Stroke - from [0..1] to clipped pyramid, where the slope is 1px.
float strokeMask() {
return min(1.0, (1.0-abs(ftcoord.x*2.0-1.0))*strokeMult) * min(1.0, ftcoord.y);
}
#endif
void main(void) {
vec4 result;
float scissor = scissorMask(fpos);
#ifdef EDGE_AA
float strokeAlpha = strokeMask();
if (strokeAlpha < strokeThr) discard;
#else
float strokeAlpha = 1.0;
#endif
if (type == 0) { // Gradient
// Calculate gradient color using box gradient
vec2 pt = (paintMat * vec3(fpos,1.0)).xy;
float d = clamp((sdroundrect(pt, extent, radius) + feather*0.5) / feather, 0.0, 1.0);
vec4 color = mix(innerCol,outerCol,d);
// Combine alpha
color *= strokeAlpha * scissor;
result = color;
} else if (type == 1) { // Image
// Calculate color fron texture
vec2 pt = (paintMat * vec3(fpos,1.0)).xy / extent;
#ifdef NANOVG_GL3
vec4 color = texture(tex, pt);
#else
vec4 color = texture2D(tex, pt);
#endif
if (texType == 1) color = vec4(color.xyz*color.w,color.w);
if (texType == 2) color = vec4(color.x);
// Apply color tint and alpha.
color *= innerCol;
// Combine alpha
color *= strokeAlpha * scissor;
result = color;
} else if (type == 2) { // Stencil fill
result = vec4(1,1,1,1);
} else if (type == 3) { // Textured tris
#ifdef NANOVG_GL3
vec4 color = texture(tex, ftcoord);
#else
vec4 color = texture2D(tex, ftcoord);
#endif
if (texType == 1) color = vec4(color.xyz*color.w,color.w);
if (texType == 2) color = vec4(color.x);
color *= scissor;
result = color * innerCol;
}
#ifdef NANOVG_GL3
outColor = result;
#else
gl_FragColor = result;
#endif
}

1452
vendor/nanovg/gl/gl.odin vendored Normal file

File diff suppressed because it is too large Load Diff

19
vendor/nanovg/gl/vert.glsl vendored Normal file
View File

@@ -0,0 +1,19 @@
#ifdef NANOVG_GL3
uniform vec2 viewSize;
in vec2 vertex;
in vec2 tcoord;
out vec2 ftcoord;
out vec2 fpos;
#else
uniform vec2 viewSize;
attribute vec2 vertex;
attribute vec2 tcoord;
varying vec2 ftcoord;
varying vec2 fpos;
#endif
void main(void) {
ftcoord = tcoord;
fpos = vertex;
gl_Position = vec4(2.0*vertex.x/viewSize.x - 1.0, 1.0 - 2.0*vertex.y/viewSize.y, 0, 1);
}

3503
vendor/nanovg/nanovg.odin vendored Normal file

File diff suppressed because it is too large Load Diff