mirror of https://github.com/bjornbytes/lovr.git
Use alpha to coverage and alpha test for text;
This commit is contained in:
parent
bfeb3d2d51
commit
a06734ae97
|
@ -889,15 +889,14 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
|
|||
lovrGraphicsMatrixTransform(transform);
|
||||
lovrGraphicsScale(scale, scale, scale);
|
||||
lovrGraphicsTranslate(0, offsety, 0);
|
||||
lovrGraphicsPushPipeline();
|
||||
state.pipelines[state.pipeline].depthWrite = false;
|
||||
state.pipelines[state.pipeline].alphaCoverage = true;
|
||||
lovrGraphicsDraw(&(DrawCommand) {
|
||||
.shader = SHADER_FONT,
|
||||
.textures[TEXTURE_DIFFUSE] = font->texture,
|
||||
.mode = MESH_TRIANGLES,
|
||||
.range = { 0, vertexCount }
|
||||
});
|
||||
lovrGraphicsPopPipeline();
|
||||
state.pipelines[state.pipeline].alphaCoverage = false;
|
||||
lovrGraphicsPop();
|
||||
}
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ typedef struct {
|
|||
} Camera;
|
||||
|
||||
typedef struct {
|
||||
bool alphaCoverage;
|
||||
Color backgroundColor;
|
||||
BlendMode blendMode;
|
||||
BlendAlphaMode blendAlphaMode;
|
||||
|
|
|
@ -47,6 +47,7 @@ typedef enum {
|
|||
|
||||
static struct {
|
||||
Texture* defaultTexture;
|
||||
bool alphaCoverage;
|
||||
BlendMode blendMode;
|
||||
BlendAlphaMode blendAlphaMode;
|
||||
bool culling;
|
||||
|
@ -629,6 +630,9 @@ void lovrGpuInit(bool srgb, getGpuProcProc getProcAddress) {
|
|||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
state.srgb = srgb;
|
||||
|
||||
state.alphaCoverage = false;
|
||||
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
|
||||
state.blendMode = BLEND_ALPHA;
|
||||
state.blendAlphaMode = BLEND_ALPHA_MULTIPLY;
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
|
@ -682,6 +686,16 @@ void lovrGpuDestroy() {
|
|||
|
||||
void lovrGpuBindPipeline(Pipeline* pipeline) {
|
||||
|
||||
// Alpha Coverage
|
||||
if (state.alphaCoverage != pipeline->alphaCoverage) {
|
||||
state.alphaCoverage = pipeline->alphaCoverage;
|
||||
if (state.alphaCoverage) {
|
||||
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
} else {
|
||||
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
}
|
||||
}
|
||||
|
||||
// Blend mode
|
||||
if (state.blendMode != pipeline->blendMode || state.blendAlphaMode != pipeline->blendAlphaMode) {
|
||||
state.blendMode = pipeline->blendMode;
|
||||
|
|
|
@ -137,6 +137,7 @@ const char* lovrFontFragmentShader = ""
|
|||
" float sdf = median(col.r, col.g, col.b); \n"
|
||||
" float w = fwidth(sdf); \n"
|
||||
" float alpha = smoothstep(.5 - w, .5 + w, sdf); \n"
|
||||
" if (alpha <= 0.0) discard; \n"
|
||||
" return vec4(graphicsColor.rgb, graphicsColor.a * alpha); \n"
|
||||
"}";
|
||||
|
||||
|
|
Loading…
Reference in New Issue