Better boolean shader flags; Multicanvas flag;

Instead of boolean shader flags turning into actual booleans defines
in the shader source, for GLSL they turn into defines.  This lets you
use ifdef, which is the more common intended usage.

Also MULTICANVAS is now a boolean shader flag.  The old MULTICANVAS
define is deprecated.
This commit is contained in:
bjorn 2019-07-28 18:08:23 -07:00
parent f564444641
commit 4b9e6849c8
2 changed files with 9 additions and 16 deletions

View File

@ -2035,13 +2035,11 @@ static char* lovrShaderGetFlagCode(ShaderFlag* flags, uint32_t flagCount) {
// Figure out how much space we need
size_t length = 0;
for (uint32_t i = 0; i < flagCount; i++) {
if (flags[i].name) {
if (flags[i].name && !(flags[i].type == FLAG_BOOL && flags[i].value.b32 == false)) {
length += strlen("#define FLAG_");
length += strlen(flags[i].name) + 1;
if (flags[i].type == FLAG_BOOL) {
length += flags[i].value.b32 ? strlen("true") : strlen("false");
} else {
length += snprintf(NULL, 0, "%d", flags[i].value.i32);
length += strlen(flags[i].name);
if (flags[i].type == FLAG_INT) {
length += snprintf(NULL, 0, " %d", flags[i].value.i32);
}
length += strlen("\n");
}
@ -2053,11 +2051,9 @@ static char* lovrShaderGetFlagCode(ShaderFlag* flags, uint32_t flagCount) {
char* s = code;
for (uint32_t i = 0; i < flagCount; i++) {
if (flags[i].name) {
s += sprintf(s, "#define FLAG_%s ", flags[i].name);
if (flags[i].type == FLAG_BOOL) {
s += sprintf(s, "%s\n", flags[i].value.b32 ? "true" : "false");
} else {
s += sprintf(s, "%d\n", flags[i].value.i32);
s += sprintf(s, "#define FLAG_%s", flags[i].name);
if (flags[i].type == FLAG_INT) {
s += sprintf(s, " %d\n", flags[i].value.i32);
}
}
}

View File

@ -4,9 +4,6 @@ const char* lovrShaderVertexPrefix = ""
"#define VERTEX VERTEX \n"
"#define MAX_BONES 48 \n"
"#define MAX_DRAWS 256 \n"
"#ifndef FLAG_skinned \n"
"#define FLAG_skinned 0 \n"
"#endif \n"
"#define lovrView lovrViews[lovrViewID] \n"
"#define lovrProjection lovrProjections[lovrViewID] \n"
"#define lovrModel lovrModels[lovrDrawID] \n"
@ -57,7 +54,7 @@ const char* lovrShaderVertexSuffix = ""
"#endif \n"
" gl_PointSize = lovrPointSize; \n"
" vec4 vertexPosition = vec4(lovrPosition, 1.); \n"
"#if FLAG_skinned \n"
"#ifdef FLAG_skinned \n"
" vertexPosition = lovrPoseMatrix * vertexPosition; \n"
"#endif \n"
" gl_Position = position(lovrProjection, lovrTransform, vertexPosition); \n"
@ -93,7 +90,7 @@ const char* lovrShaderFragmentPrefix = ""
const char* lovrShaderFragmentSuffix = ""
"void main() { \n"
"#ifdef MULTICANVAS \n"
"#if defined(MULTICANVAS) || defined(FLAG_multicanvas) \n"
" colors(lovrColor, lovrDiffuseTexture, texCoord); \n"
"#else \n"
" lovrCanvas[0] = color(lovrColor, lovrDiffuseTexture, texCoord); \n"