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);
|
glfwSetTime(0);
|
||||||
glfwSwapInterval(0);
|
glfwSwapInterval(0);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthFunc(GL_LESS);
|
glDepthFunc(GL_LESS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,8 @@ void lovrGraphicsInit() {
|
||||||
state.projection = mat4_init();
|
state.projection = mat4_init();
|
||||||
state.lastTransform = mat4_init();
|
state.lastTransform = mat4_init();
|
||||||
state.lastProjection = mat4_init();
|
state.lastProjection = mat4_init();
|
||||||
|
|
||||||
state.defaultShader = lovrGraphicsNewShader(lovrDefaultVertexShader, lovrDefaultFragmentShader);
|
state.defaultShader = lovrGraphicsNewShader(lovrDefaultVertexShader, lovrDefaultFragmentShader);
|
||||||
|
state.lastColor = LOVR_COLOR(255, 255, 255, 255);
|
||||||
lovrGraphicsReset();
|
lovrGraphicsReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,10 +38,10 @@ void lovrGraphicsReset() {
|
||||||
memset(state.lastTransform, 0, 16);
|
memset(state.lastTransform, 0, 16);
|
||||||
memset(state.lastProjection, 0, 16);
|
memset(state.lastProjection, 0, 16);
|
||||||
|
|
||||||
// TODO customize via lovr.conf
|
lovrGraphicsSetProjection(.1f, 100.f, 67 * M_PI / 180); // TODO customize via lovr.conf
|
||||||
lovrGraphicsSetProjection(.1f, 100.f, 67 * M_PI / 180);
|
|
||||||
|
|
||||||
lovrGraphicsSetShader(state.defaultShader);
|
lovrGraphicsSetShader(state.defaultShader);
|
||||||
|
lovrGraphicsSetBackgroundColor(0, 0, 0, 0);
|
||||||
|
lovrGraphicsSetColor(255, 255, 255, 255);
|
||||||
lovrGraphicsSetColorMask(1, 1, 1, 1);
|
lovrGraphicsSetColorMask(1, 1, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +87,18 @@ void lovrGraphicsPrepare() {
|
||||||
lovrShaderSendFloatMat4(shader, uniformId, projection);
|
lovrShaderSendFloatMat4(shader, uniformId, projection);
|
||||||
memcpy(lastProjection, projection, 16 * sizeof(float));
|
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) {
|
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);
|
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) {
|
void lovrGraphicsGetColorMask(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a) {
|
||||||
unsigned char mask = state.colorMask;
|
unsigned char mask = state.colorMask;
|
||||||
*r = mask & 0x1;
|
*r = mask & 0x1;
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
#define LOVR_GRAPHICS_TYPES
|
#define LOVR_GRAPHICS_TYPES
|
||||||
typedef vec_t(mat4) vec_mat4_t;
|
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 {
|
typedef struct {
|
||||||
Shader* activeShader;
|
Shader* activeShader;
|
||||||
Shader* defaultShader;
|
Shader* defaultShader;
|
||||||
|
@ -14,6 +20,8 @@ typedef struct {
|
||||||
mat4 lastTransform;
|
mat4 lastTransform;
|
||||||
mat4 projection;
|
mat4 projection;
|
||||||
mat4 lastProjection;
|
mat4 lastProjection;
|
||||||
|
unsigned int color;
|
||||||
|
unsigned int lastColor;
|
||||||
unsigned char colorMask;
|
unsigned char colorMask;
|
||||||
} GraphicsState;
|
} GraphicsState;
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,6 +33,8 @@ void lovrGraphicsPresent();
|
||||||
void lovrGraphicsPrepare();
|
void lovrGraphicsPrepare();
|
||||||
void lovrGraphicsGetBackgroundColor(float* r, float* g, float* b, float* a);
|
void lovrGraphicsGetBackgroundColor(float* r, float* g, float* b, float* a);
|
||||||
void lovrGraphicsSetBackgroundColor(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 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);
|
void lovrGraphicsSetColorMask(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
|
||||||
Shader* lovrGraphicsGetShader();
|
Shader* lovrGraphicsGetShader();
|
||||||
|
|
|
@ -11,6 +11,8 @@ const luaL_Reg lovrGraphics[] = {
|
||||||
{ "present", l_lovrGraphicsPresent },
|
{ "present", l_lovrGraphicsPresent },
|
||||||
{ "getBackgroundColor", l_lovrGraphicsGetBackgroundColor },
|
{ "getBackgroundColor", l_lovrGraphicsGetBackgroundColor },
|
||||||
{ "setBackgroundColor", l_lovrGraphicsSetBackgroundColor },
|
{ "setBackgroundColor", l_lovrGraphicsSetBackgroundColor },
|
||||||
|
{ "getColor", l_lovrGraphicsGetColor },
|
||||||
|
{ "setColor", l_lovrGraphicsSetColor },
|
||||||
{ "getColorMask", l_lovrGraphicsGetColorMask },
|
{ "getColorMask", l_lovrGraphicsGetColorMask },
|
||||||
{ "setColorMask", l_lovrGraphicsSetColorMask },
|
{ "setColorMask", l_lovrGraphicsSetColorMask },
|
||||||
{ "setShader", l_lovrGraphicsSetShader },
|
{ "setShader", l_lovrGraphicsSetShader },
|
||||||
|
@ -88,6 +90,31 @@ int l_lovrGraphicsSetBackgroundColor(lua_State* L) {
|
||||||
return 0;
|
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) {
|
int l_lovrGraphicsGetColorMask(lua_State* L) {
|
||||||
unsigned char r, g, b, a;
|
unsigned char r, g, b, a;
|
||||||
lovrGraphicsGetColorMask(&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_lovrGraphicsPresent(lua_State* L);
|
||||||
int l_lovrGraphicsGetBackgroundColor(lua_State* L);
|
int l_lovrGraphicsGetBackgroundColor(lua_State* L);
|
||||||
int l_lovrGraphicsSetBackgroundColor(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_lovrGraphicsGetColorMask(lua_State* L);
|
||||||
int l_lovrGraphicsSetColorMask(lua_State* L);
|
int l_lovrGraphicsSetColorMask(lua_State* L);
|
||||||
int l_lovrGraphicsGetShader(lua_State* L);
|
int l_lovrGraphicsGetShader(lua_State* L);
|
||||||
|
|
Loading…
Reference in New Issue