mirror of https://github.com/bjornbytes/lovr.git
lovr.graphics.setColor;
This commit is contained in:
parent
a24bdcf98a
commit
e188c0beca
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue