lovr.graphics.setColor;

This commit is contained in:
bjorn 2016-09-28 20:11:58 -07:00
parent a24bdcf98a
commit e188c0beca
5 changed files with 68 additions and 5 deletions

View File

@ -39,6 +39,8 @@ void initGlfw(GLFWerrorfun onError, GLFWwindowclosefun onClose, void* userPointe
glfwSetTime(0);
glfwSwapInterval(0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
}

View File

@ -19,9 +19,8 @@ void lovrGraphicsInit() {
state.projection = mat4_init();
state.lastTransform = mat4_init();
state.lastProjection = mat4_init();
state.defaultShader = lovrGraphicsNewShader(lovrDefaultVertexShader, lovrDefaultFragmentShader);
state.lastColor = LOVR_COLOR(255, 255, 255, 255);
lovrGraphicsReset();
}
@ -39,10 +38,10 @@ void lovrGraphicsReset() {
memset(state.lastTransform, 0, 16);
memset(state.lastProjection, 0, 16);
// TODO customize via lovr.conf
lovrGraphicsSetProjection(.1f, 100.f, 67 * M_PI / 180);
lovrGraphicsSetProjection(.1f, 100.f, 67 * M_PI / 180); // TODO customize via lovr.conf
lovrGraphicsSetShader(state.defaultShader);
lovrGraphicsSetBackgroundColor(0, 0, 0, 0);
lovrGraphicsSetColor(255, 255, 255, 255);
lovrGraphicsSetColorMask(1, 1, 1, 1);
}
@ -88,6 +87,18 @@ void lovrGraphicsPrepare() {
lovrShaderSendFloatMat4(shader, uniformId, projection);
memcpy(lastProjection, projection, 16 * sizeof(float));
}
if (state.lastColor != state.color) {
int uniformId = lovrShaderGetUniformId(shader, "lovrColor");
float color[4] = {
LOVR_COLOR_R(state.color) / 255.f,
LOVR_COLOR_G(state.color) / 255.f,
LOVR_COLOR_B(state.color) / 255.f,
LOVR_COLOR_A(state.color) / 255.f
};
lovrShaderSendFloatVec4(shader, uniformId, color);
state.lastColor = state.color;
}
}
void lovrGraphicsGetBackgroundColor(float* r, float* g, float* b, float* a) {
@ -103,6 +114,17 @@ void lovrGraphicsSetBackgroundColor(float r, float g, float b, float a) {
glClearColor(r / 255, g / 255, b / 255, a / 255);
}
void lovrGraphicsGetColor(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a) {
*r = LOVR_COLOR_R(state.color);
*g = LOVR_COLOR_G(state.color);
*b = LOVR_COLOR_B(state.color);
*a = LOVR_COLOR_A(state.color);
}
void lovrGraphicsSetColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
state.color = LOVR_COLOR(r, g, b, a);
}
void lovrGraphicsGetColorMask(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a) {
unsigned char mask = state.colorMask;
*r = mask & 0x1;

View File

@ -7,6 +7,12 @@
#define LOVR_GRAPHICS_TYPES
typedef vec_t(mat4) vec_mat4_t;
#define LOVR_COLOR(r, g, b, a) ((a << 0) | (b << 8) | (g << 16) | (r << 24))
#define LOVR_COLOR_R(c) (c >> 24 & 0xff)
#define LOVR_COLOR_G(c) (c >> 16 & 0xff)
#define LOVR_COLOR_B(c) (c >> 8 & 0xff)
#define LOVR_COLOR_A(c) (c >> 0 & 0xff)
typedef struct {
Shader* activeShader;
Shader* defaultShader;
@ -14,6 +20,8 @@ typedef struct {
mat4 lastTransform;
mat4 projection;
mat4 lastProjection;
unsigned int color;
unsigned int lastColor;
unsigned char colorMask;
} GraphicsState;
#endif
@ -25,6 +33,8 @@ void lovrGraphicsPresent();
void lovrGraphicsPrepare();
void lovrGraphicsGetBackgroundColor(float* r, float* g, float* b, float* a);
void lovrGraphicsSetBackgroundColor(float r, float g, float b, float a);
void lovrGraphicsGetColor(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a);
void lovrGraphicsSetColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
void lovrGraphicsGetColorMask(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a);
void lovrGraphicsSetColorMask(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
Shader* lovrGraphicsGetShader();

View File

@ -11,6 +11,8 @@ const luaL_Reg lovrGraphics[] = {
{ "present", l_lovrGraphicsPresent },
{ "getBackgroundColor", l_lovrGraphicsGetBackgroundColor },
{ "setBackgroundColor", l_lovrGraphicsSetBackgroundColor },
{ "getColor", l_lovrGraphicsGetColor },
{ "setColor", l_lovrGraphicsSetColor },
{ "getColorMask", l_lovrGraphicsGetColorMask },
{ "setColorMask", l_lovrGraphicsSetColorMask },
{ "setShader", l_lovrGraphicsSetShader },
@ -88,6 +90,31 @@ int l_lovrGraphicsSetBackgroundColor(lua_State* L) {
return 0;
}
int l_lovrGraphicsGetColor(lua_State* L) {
unsigned char r, g, b, a;
lovrGraphicsGetColor(&r, &g, &b, &a);
lua_pushinteger(L, r);
lua_pushinteger(L, g);
lua_pushinteger(L, b);
lua_pushinteger(L, a);
return 4;
}
int l_lovrGraphicsSetColor(lua_State* L) {
if (lua_gettop(L) <= 1 && lua_isnoneornil(L, 1)) {
lovrGraphicsSetColor(255, 255, 255, 255);
return 0;
}
unsigned char r = lua_tointeger(L, 1);
unsigned char g = lua_tointeger(L, 2);
unsigned char b = lua_tointeger(L, 3);
unsigned char a = lua_isnoneornil(L, 4) ? 255 : lua_tointeger(L, 4);
lovrGraphicsSetColor(r, g, b, a);
return 0;
}
int l_lovrGraphicsGetColorMask(lua_State* L) {
unsigned char r, g, b, a;
lovrGraphicsGetColorMask(&r, &g, &b, &a);

View File

@ -13,6 +13,8 @@ int l_lovrGraphicsClear(lua_State* L);
int l_lovrGraphicsPresent(lua_State* L);
int l_lovrGraphicsGetBackgroundColor(lua_State* L);
int l_lovrGraphicsSetBackgroundColor(lua_State* L);
int l_lovrGraphicsGetColor(lua_State* L);
int l_lovrGraphicsSetColor(lua_State* L);
int l_lovrGraphicsGetColorMask(lua_State* L);
int l_lovrGraphicsSetColorMask(lua_State* L);
int l_lovrGraphicsGetShader(lua_State* L);