Gamma correct colors correctly;

This commit is contained in:
bjorn 2017-11-25 17:57:59 -08:00
parent 7c64bac1c6
commit 093ef37bf3
1 changed files with 15 additions and 2 deletions

View File

@ -4,6 +4,7 @@
#include "loaders/font.h" #include "loaders/font.h"
#include "event/event.h" #include "event/event.h"
#include "filesystem/filesystem.h" #include "filesystem/filesystem.h"
#include "math/math.h"
#include "math/mat4.h" #include "math/mat4.h"
#include "math/vec3.h" #include "math/vec3.h"
#include "util.h" #include "util.h"
@ -24,6 +25,14 @@ static void onCloseWindow(GLFWwindow* window) {
} }
} }
static void gammaCorrectColor(Color* color) {
if (state.gammaCorrect) {
color->r = lovrMathGammaToLinear(color->r);
color->g = lovrMathGammaToLinear(color->g);
color->b = lovrMathGammaToLinear(color->b);
}
}
// Base // Base
void lovrGraphicsInit() { void lovrGraphicsInit() {
@ -115,8 +124,10 @@ void lovrGraphicsPrepare(float* pose) {
} }
// Color // Color
float color[4] = { state.color.r, state.color.g, state.color.b, state.color.a }; Color color = state.color;
lovrShaderSetFloat(shader, "lovrColor", color, 4); gammaCorrectColor(&color);
float data[4] = { color.r, color.g, color.b, color.a };
lovrShaderSetFloat(shader, "lovrColor", data, 4);
// Point size // Point size
lovrShaderSetFloat(shader, "lovrPointSize", &state.pointSize, 1); lovrShaderSetFloat(shader, "lovrPointSize", &state.pointSize, 1);
@ -135,6 +146,7 @@ void lovrGraphicsPrepare(float* pose) {
for (int i = 0; i < MAX_MATERIAL_COLORS; i++) { for (int i = 0; i < MAX_MATERIAL_COLORS; i++) {
Color color = lovrMaterialGetColor(material, i); Color color = lovrMaterialGetColor(material, i);
gammaCorrectColor(&color);
float data[4] = { color.r, color.g, color.b, color.a }; float data[4] = { color.r, color.g, color.b, color.a };
lovrShaderSetFloat(shader, lovrShaderColorUniforms[i], data, 4); lovrShaderSetFloat(shader, lovrShaderColorUniforms[i], data, 4);
} }
@ -241,6 +253,7 @@ Color lovrGraphicsGetBackgroundColor() {
void lovrGraphicsSetBackgroundColor(Color color) { void lovrGraphicsSetBackgroundColor(Color color) {
state.backgroundColor = color; state.backgroundColor = color;
gammaCorrectColor(&color);
glClearColor(color.r, color.g, color.b, color.a); glClearColor(color.r, color.g, color.b, color.a);
} }