Skip to content

Commit ebc9a10

Browse files
committed
Fixes;
1 parent 54edbf5 commit ebc9a10

3 files changed

Lines changed: 22 additions & 11 deletions

File tree

src/api/l_graphics.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,8 +1491,6 @@ static int l_lovrGraphicsNewMaterial(lua_State* L) {
14911491
luax_assert(L, material);
14921492

14931493
if (lua_istable(L, 1)) {
1494-
float value, color[4];
1495-
14961494
for (uint32_t i = 0; i < NUMBER_COUNT; i++) {
14971495
lua_pushlstring(L, lovrMaterialNumber[i].string, lovrMaterialNumber[i].length);
14981496
lua_gettable(L, 1);
@@ -1509,6 +1507,7 @@ static int l_lovrGraphicsNewMaterial(lua_State* L) {
15091507

15101508
lua_gettable(L, 1);
15111509
if (!lua_isnil(L, -1)) {
1510+
float color[4];
15121511
luax_optcolor(L, -1, color);
15131512
lovrMaterialSetColor(material, i, color);
15141513
}
@@ -1536,7 +1535,7 @@ static int l_lovrGraphicsNewMaterial(lua_State* L) {
15361535
lua_pop(L, 1);
15371536
}
15381537

1539-
float quad[4];
1538+
float quad[4] = { 0.f, 0.f, 1.f, 1.f };
15401539

15411540
// Deprecated
15421541
lua_getfield(L, 1, "uvShift");
@@ -1577,6 +1576,8 @@ static int l_lovrGraphicsNewMaterial(lua_State* L) {
15771576
lua_pop(L, 4);
15781577
}
15791578
lua_pop(L, 1);
1579+
1580+
lovrMaterialSetQuad(material, quad[0], quad[1], quad[2], quad[3]);
15801581
}
15811582

15821583
luax_pushtype(L, Material, material);

src/api/l_graphics_material.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static int l_lovrMaterialSetNumber(lua_State* L) {
2929
Material* material = luax_checktype(L, 1, Material);
3030
MaterialNumber key = luax_checkenum(L, 2, MaterialNumber, NULL);
3131
float number = luax_checkfloat(L, 3);
32-
lovrMaterialSetNumber(material, key, number);
32+
luax_assert(L, lovrMaterialSetNumber(material, key, number));
3333
return 0;
3434
}
3535

@@ -50,7 +50,7 @@ static int l_lovrMaterialSetColor(lua_State* L) {
5050
float color[4];
5151
MaterialColor key = lua_type(L, index) == LUA_TSTRING ? luax_checkenum(L, index++, MaterialColor, NULL) : COLOR_BASE;
5252
luax_readcolor(L, index, color);
53-
lovrMaterialSetColor(material, key, color);
53+
luax_assert(L, lovrMaterialSetColor(material, key, color));
5454
return 0;
5555
}
5656

@@ -67,7 +67,7 @@ static int l_lovrMaterialSetTexture(lua_State* L) {
6767
int index = 2;
6868
MaterialTexture key = lua_type(L, index) == LUA_TSTRING ? luax_checkenum(L, index++, MaterialTexture, NULL) : TEXTURE_COLOR;
6969
Texture* texture = luax_checktype(L, index, Texture);
70-
lovrMaterialSetTexture(material, key, texture);
70+
luax_assert(L, lovrMaterialSetTexture(material, key, texture));
7171
return 0;
7272
}
7373

src/modules/graphics/graphics.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4208,9 +4208,11 @@ static bool lovrMaterialAllocate(Material* material) {
42084208
static void lovrMaterialRecycle(Material* material) {
42094209
if (!material->block) return;
42104210
mtx_lock(&state.lock);
4211-
material->block->nodes[material->index].tick = state.tick;
4212-
material->block->tail = material->index;
4213-
if (material->block->head == ~0u) material->block->head = material->block->tail;
4211+
MaterialBlock* block = material->block;
4212+
block->nodes[material->index].tick = state.tick;
4213+
if (block->head == ~0u) block->head = material->index;
4214+
else block->nodes[block->tail].next = material->index;
4215+
block->tail = material->index;
42144216
material->block = NULL;
42154217
material->index = ~0u;
42164218
material->bundle = NULL;
@@ -4224,15 +4226,23 @@ static bool lovrMaterialUpload(Material* material) {
42244226

42254227
mtx_lock(&state.lock);
42264228
BufferView staging = getBuffer(GPU_BUFFER_STREAM, sizeof(MaterialData), 4);
4227-
if (!staging.buffer) return mtx_unlock(&state.lock), NULL;
4229+
if (!staging.buffer) return mtx_unlock(&state.lock), false;
42284230
gpu_copy_buffers(state.stream, staging.buffer, material->block->buffer, staging.offset, MATERIAL_STRIDE * material->index, sizeof(MaterialData));
42294231
state.barrier.prev |= GPU_PHASE_COPY;
42304232
state.barrier.next |= GPU_PHASE_SHADER_VERTEX | GPU_PHASE_SHADER_FRAGMENT;
42314233
state.barrier.flush |= GPU_CACHE_TRANSFER_WRITE;
42324234
state.barrier.clear |= GPU_CACHE_UNIFORM;
42334235
material->bufferTick = state.tick;
42344236
material->pointer = staging.pointer;
4235-
memcpy(material->pointer, &material->data, sizeof(MaterialData));
4237+
memcpy(material->pointer->numbers, &material->data.numbers, sizeof(material->data.numbers));
4238+
for (uint32_t i = 0; i < COLOR_COUNT; i++) {
4239+
material->pointer->colors[i][0] = lovrMathGammaToLinear(material->data.colors[i][0]);
4240+
material->pointer->colors[i][1] = lovrMathGammaToLinear(material->data.colors[i][1]);
4241+
material->pointer->colors[i][2] = lovrMathGammaToLinear(material->data.colors[i][2]);
4242+
material->pointer->colors[i][3] = material->data.colors[i][3];
4243+
}
4244+
memcpy(material->pointer->quad, material->data.quad, sizeof(material->data.quad));
4245+
memcpy(material->pointer->sdfRange, material->data.sdfRange, sizeof(material->data.sdfRange));
42364246
mtx_unlock(&state.lock);
42374247

42384248
return true;

0 commit comments

Comments
 (0)