mirror of https://github.com/bjornbytes/lovr.git
lovr.graphics.setAlphaSampling for alpha to coverage;
This commit is contained in:
parent
28ab5377c8
commit
2540953422
|
@ -387,6 +387,16 @@ static int l_lovrGraphicsReset(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrGraphicsGetAlphaSampling(lua_State* L) {
|
||||
lua_pushboolean(L, lovrGraphicsGetAlphaSampling());
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrGraphicsSetAlphaSampling(lua_State* L) {
|
||||
lovrGraphicsSetAlphaSampling(lua_toboolean(L, 1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrGraphicsGetBackgroundColor(lua_State* L) {
|
||||
Color color = lovrGraphicsGetBackgroundColor();
|
||||
lua_pushnumber(L, color.r);
|
||||
|
@ -1349,6 +1359,8 @@ static const luaL_Reg lovrGraphics[] = {
|
|||
|
||||
// State
|
||||
{ "reset", l_lovrGraphicsReset },
|
||||
{ "getAlphaSampling", l_lovrGraphicsGetAlphaSampling },
|
||||
{ "setAlphaSampling", l_lovrGraphicsSetAlphaSampling },
|
||||
{ "getBackgroundColor", l_lovrGraphicsGetBackgroundColor },
|
||||
{ "setBackgroundColor", l_lovrGraphicsSetBackgroundColor },
|
||||
{ "getBlendMode", l_lovrGraphicsGetBlendMode },
|
||||
|
|
|
@ -203,6 +203,17 @@ void lovrGraphicsPopPipeline() {
|
|||
state.pipeline = &state.pipelines[state.pipelineIndex];
|
||||
}
|
||||
|
||||
bool lovrGraphicsGetAlphaSampling() {
|
||||
return state.pipeline->alphaSampling;
|
||||
}
|
||||
|
||||
void lovrGraphicsSetAlphaSampling(bool sample) {
|
||||
if (state.pipeline->alphaSampling != sample) {
|
||||
state.pipeline->alphaSampling = sample;
|
||||
state.pipeline->dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
Color lovrGraphicsGetBackgroundColor() {
|
||||
return state.pipeline->backgroundColor;
|
||||
}
|
||||
|
@ -938,14 +949,15 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
|
|||
lovrGraphicsMatrixTransform(transform);
|
||||
lovrGraphicsScale((float[3]) { scale, scale, scale });
|
||||
lovrGraphicsTranslate((float[3]) { 0, offsety, 0 });
|
||||
state.pipeline->alphaCoverage = true;
|
||||
lovrGraphicsPushPipeline();
|
||||
lovrGraphicsSetAlphaSampling(true);
|
||||
lovrGraphicsDraw(&(DrawCommand) {
|
||||
.shader = SHADER_FONT,
|
||||
.diffuseTexture = font->texture,
|
||||
.mode = MESH_TRIANGLES,
|
||||
.vertex.count = vertexCount
|
||||
});
|
||||
state.pipeline->alphaCoverage = false;
|
||||
lovrGraphicsPopPipeline();
|
||||
lovrGraphicsPop();
|
||||
}
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ typedef struct {
|
|||
} Camera;
|
||||
|
||||
typedef struct {
|
||||
bool alphaCoverage;
|
||||
bool alphaSampling;
|
||||
Color backgroundColor;
|
||||
BlendMode blendMode;
|
||||
BlendAlphaMode blendAlphaMode;
|
||||
|
@ -179,6 +179,8 @@ Buffer* lovrGraphicsGetIdentityBuffer();
|
|||
void lovrGraphicsReset();
|
||||
void lovrGraphicsPushPipeline();
|
||||
void lovrGraphicsPopPipeline();
|
||||
bool lovrGraphicsGetAlphaSampling();
|
||||
void lovrGraphicsSetAlphaSampling(bool alphaSampling);
|
||||
Color lovrGraphicsGetBackgroundColor();
|
||||
void lovrGraphicsSetBackgroundColor(Color color);
|
||||
void lovrGraphicsGetBlendMode(BlendMode* mode, BlendAlphaMode* alphaMode);
|
||||
|
|
|
@ -48,7 +48,7 @@ typedef enum {
|
|||
|
||||
static struct {
|
||||
Texture* defaultTexture;
|
||||
bool alphaCoverage;
|
||||
bool alphaToCoverage;
|
||||
BlendMode blendMode;
|
||||
BlendAlphaMode blendAlphaMode;
|
||||
bool culling;
|
||||
|
@ -633,7 +633,7 @@ void lovrGpuInit(bool srgb, getProcAddressProc getProcAddress) {
|
|||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
state.srgb = srgb;
|
||||
|
||||
state.alphaCoverage = false;
|
||||
state.alphaToCoverage = false;
|
||||
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
|
||||
state.blendMode = BLEND_ALPHA;
|
||||
|
@ -690,9 +690,9 @@ void lovrGpuDestroy() {
|
|||
void lovrGpuBindPipeline(Pipeline* pipeline) {
|
||||
|
||||
// Alpha Coverage
|
||||
if (state.alphaCoverage != pipeline->alphaCoverage) {
|
||||
state.alphaCoverage = pipeline->alphaCoverage;
|
||||
if (state.alphaCoverage) {
|
||||
if (state.alphaToCoverage != pipeline->alphaSampling) {
|
||||
state.alphaToCoverage = pipeline->alphaSampling;
|
||||
if (state.alphaToCoverage) {
|
||||
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
} else {
|
||||
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
|
||||
|
|
Loading…
Reference in New Issue