mirror of https://github.com/bjornbytes/lovr.git
rm Color;
This commit is contained in:
parent
4be958195d
commit
c60116ad61
|
@ -403,29 +403,29 @@ uint32_t _luax_checku32(lua_State* L, int index) {
|
|||
return (uint32_t) x;
|
||||
}
|
||||
|
||||
void luax_readcolor(lua_State* L, int index, Color* color) {
|
||||
color->r = color->g = color->b = color->a = 1.f;
|
||||
void luax_readcolor(lua_State* L, int index, float color[4]) {
|
||||
color[0] = color[1] = color[2] = color[3] = 1.f;
|
||||
|
||||
if (lua_istable(L, index)) {
|
||||
for (int i = 1; i <= 4; i++) {
|
||||
lua_rawgeti(L, index, i);
|
||||
}
|
||||
color->r = luax_checkfloat(L, -4);
|
||||
color->g = luax_checkfloat(L, -3);
|
||||
color->b = luax_checkfloat(L, -2);
|
||||
color->a = luax_optfloat(L, -1, 1.);
|
||||
color[0] = luax_checkfloat(L, -4);
|
||||
color[1] = luax_checkfloat(L, -3);
|
||||
color[2] = luax_checkfloat(L, -2);
|
||||
color[3] = luax_optfloat(L, -1, 1.);
|
||||
lua_pop(L, 4);
|
||||
} else if (lua_gettop(L) >= index + 2) {
|
||||
color->r = luax_checkfloat(L, index);
|
||||
color->g = luax_checkfloat(L, index + 1);
|
||||
color->b = luax_checkfloat(L, index + 2);
|
||||
color->a = luax_optfloat(L, index + 3, 1.);
|
||||
color[0] = luax_checkfloat(L, index);
|
||||
color[1] = luax_checkfloat(L, index + 1);
|
||||
color[2] = luax_checkfloat(L, index + 2);
|
||||
color[3] = luax_optfloat(L, index + 3, 1.);
|
||||
} else if (lua_gettop(L) <= index + 1) {
|
||||
uint32_t x = luaL_checkinteger(L, index);
|
||||
color->r = ((x >> 16) & 0xff) / 255.f;
|
||||
color->g = ((x >> 8) & 0xff) / 255.f;
|
||||
color->b = ((x >> 0) & 0xff) / 255.f;
|
||||
color->a = luax_optfloat(L, index + 1, 1.);
|
||||
color[0] = ((x >> 16) & 0xff) / 255.f;
|
||||
color[1] = ((x >> 8) & 0xff) / 255.f;
|
||||
color[2] = ((x >> 0) & 0xff) / 255.f;
|
||||
color[3] = luax_optfloat(L, index + 1, 1.);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
struct lua_State;
|
||||
struct luaL_Reg;
|
||||
struct Color;
|
||||
|
||||
// Enums
|
||||
typedef struct {
|
||||
|
@ -122,7 +121,7 @@ int luax_setconf(struct lua_State* L);
|
|||
void luax_setmainthread(struct lua_State* L);
|
||||
void luax_atexit(struct lua_State* L, void (*destructor)(void));
|
||||
uint32_t _luax_checku32(struct lua_State* L, int index);
|
||||
void luax_readcolor(struct lua_State* L, int index, struct Color* color);
|
||||
void luax_readcolor(struct lua_State* L, int index, float color[4]);
|
||||
int luax_readmesh(struct lua_State* L, int index, float** vertices, uint32_t* vertexCount, uint32_t** indices, uint32_t* indexCount, bool* shouldFree);
|
||||
|
||||
// Module helpers
|
||||
|
|
|
@ -405,10 +405,10 @@ static int l_lovrModelDataGetMaterialColor(lua_State* L) {
|
|||
ModelData* model = luax_checktype(L, 1, ModelData);
|
||||
ModelMaterial* material = luax_checkmaterial(L, 2, model);
|
||||
MaterialColor type = luax_checkenum(L, 3, MaterialColor, "diffuse");
|
||||
lua_pushnumber(L, material->colors[type].r);
|
||||
lua_pushnumber(L, material->colors[type].g);
|
||||
lua_pushnumber(L, material->colors[type].b);
|
||||
lua_pushnumber(L, material->colors[type].a);
|
||||
lua_pushnumber(L, material->colors[type][0]);
|
||||
lua_pushnumber(L, material->colors[type][1]);
|
||||
lua_pushnumber(L, material->colors[type][2]);
|
||||
lua_pushnumber(L, material->colors[type][3]);
|
||||
return 4;
|
||||
}
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ typedef struct {
|
|||
typedef struct {
|
||||
const char* name;
|
||||
float scalars[MAX_MATERIAL_SCALARS];
|
||||
Color colors[MAX_MATERIAL_COLORS];
|
||||
float colors[MAX_MATERIAL_COLORS][4];
|
||||
uint32_t images[MAX_MATERIAL_TEXTURES];
|
||||
TextureFilter filters[MAX_MATERIAL_TEXTURES];
|
||||
TextureWrap wraps[MAX_MATERIAL_TEXTURES];
|
||||
|
|
|
@ -703,8 +703,8 @@ ModelData* lovrModelDataInitGltf(ModelData* model, Blob* source, ModelDataIO* io
|
|||
material->scalars[SCALAR_METALNESS] = 1.f;
|
||||
material->scalars[SCALAR_ROUGHNESS] = 1.f;
|
||||
material->scalars[SCALAR_ALPHA_CUTOFF] = 0.f;
|
||||
material->colors[COLOR_DIFFUSE] = (Color) { 1.f, 1.f, 1.f, 1.f };
|
||||
material->colors[COLOR_EMISSIVE] = (Color) { 0.f, 0.f, 0.f, 0.f };
|
||||
memcpy(material->colors[COLOR_DIFFUSE], (float[4]) { 1.f, 1.f, 1.f, 1.f }, 16);
|
||||
memcpy(material->colors[COLOR_EMISSIVE], (float[4]) { 0.f, 0.f, 0.f, 0.f }, 16);
|
||||
memset(material->images, 0xff, MAX_MATERIAL_TEXTURES * sizeof(uint32_t));
|
||||
|
||||
for (int k = (token++)->size; k > 0; k--) {
|
||||
|
@ -714,10 +714,10 @@ ModelData* lovrModelDataInitGltf(ModelData* model, Blob* source, ModelDataIO* io
|
|||
gltfString key = NOM_STR(json, token);
|
||||
if (STR_EQ(key, "baseColorFactor")) {
|
||||
token++; // Enter array
|
||||
material->colors[COLOR_DIFFUSE].r = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE].g = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE].b = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE].a = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE][0] = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE][1] = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE][2] = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_DIFFUSE][3] = NOM_FLOAT(json, token);
|
||||
} else if (STR_EQ(key, "baseColorTexture")) {
|
||||
token = resolveTexture(json, token, material, TEXTURE_DIFFUSE, textures, samplers);
|
||||
} else if (STR_EQ(key, "metallicFactor")) {
|
||||
|
@ -741,9 +741,9 @@ ModelData* lovrModelDataInitGltf(ModelData* model, Blob* source, ModelDataIO* io
|
|||
token = resolveTexture(json, token, material, TEXTURE_EMISSIVE, textures, samplers);
|
||||
} else if (STR_EQ(key, "emissiveFactor")) {
|
||||
token++; // Enter array
|
||||
material->colors[COLOR_EMISSIVE].r = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_EMISSIVE].g = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_EMISSIVE].b = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_EMISSIVE][0] = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_EMISSIVE][1] = NOM_FLOAT(json, token);
|
||||
material->colors[COLOR_EMISSIVE][2] = NOM_FLOAT(json, token);
|
||||
} else if (STR_EQ(key, "alphaCutoff")) {
|
||||
material->scalars[SCALAR_ALPHA_CUTOFF] = NOM_FLOAT(json, token);
|
||||
} else if (STR_EQ(key, "name")) {
|
||||
|
|
|
@ -60,7 +60,7 @@ static void parseMtl(char* path, char* base, ModelDataIO* io, arr_image_t* image
|
|||
g = strtof(s, &s);
|
||||
b = strtof(s, &s);
|
||||
ModelMaterial* material = &materials->data[materials->length - 1];
|
||||
material->colors[COLOR_DIFFUSE] = (Color) { r, g, b, 1.f };
|
||||
memcpy(material->colors[COLOR_DIFFUSE], (float[4]) { r, g, b, 1.f }, 16);
|
||||
} else if (STARTS_WITH(line, "map_Kd ")) {
|
||||
lovrAssert(base - path + (length - 7) < 1024, "Bad OBJ: Material image filename is too long");
|
||||
memcpy(base, line + 7, length - 7);
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#define COUNTOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
#define CHECK_SIZEOF(T) int(*_o)[sizeof(T)]=1
|
||||
|
||||
typedef struct Color { float r, g, b, a; } Color;
|
||||
|
||||
// Error handling
|
||||
typedef void errorFn(void*, const char*, va_list);
|
||||
void lovrSetErrorCallback(errorFn* callback, void* userdata);
|
||||
|
|
Loading…
Reference in New Issue