rm Color;

This commit is contained in:
bjorn 2022-04-29 20:55:54 -07:00
parent 4be958195d
commit c60116ad61
7 changed files with 30 additions and 33 deletions

View File

@ -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.);
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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];

View File

@ -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")) {

View File

@ -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);

View File

@ -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);