mirror of https://github.com/bjornbytes/lovr.git
Pass:cube; Pass:box;
This commit is contained in:
parent
3013567e73
commit
d3a1a0ec22
|
@ -426,6 +426,22 @@ static int l_lovrPassPlane(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrPassCube(lua_State* L) {
|
||||
Pass* pass = luax_checktype(L, 1, Pass);
|
||||
float transform[16];
|
||||
luax_readmat4(L, 2, transform, 1);
|
||||
lovrPassBox(pass, transform);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrPassBox(lua_State* L) {
|
||||
Pass* pass = luax_checktype(L, 1, Pass);
|
||||
float transform[16];
|
||||
luax_readmat4(L, 2, transform, 3);
|
||||
lovrPassBox(pass, transform);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrPassClear(lua_State* L) {
|
||||
Pass* pass = luax_checktype(L, 1, Pass);
|
||||
|
||||
|
@ -604,6 +620,8 @@ const luaL_Reg lovrPass[] = {
|
|||
{ "points", l_lovrPassPoints },
|
||||
{ "line", l_lovrPassLine },
|
||||
{ "plane", l_lovrPassPlane },
|
||||
{ "cube", l_lovrPassCube },
|
||||
{ "box", l_lovrPassBox },
|
||||
|
||||
{ "clear", l_lovrPassClear },
|
||||
{ "copy", l_lovrPassCopy },
|
||||
|
|
|
@ -2082,6 +2082,60 @@ void lovrPassPlane(Pass* pass, float* transform, uint32_t cols, uint32_t rows) {
|
|||
}
|
||||
}
|
||||
|
||||
void lovrPassBox(Pass* pass, float* transform) {
|
||||
ShapeVertex* vertices;
|
||||
uint16_t* indices;
|
||||
|
||||
ShapeVertex vertexData[] = {
|
||||
{ { -.5f, -.5f, -.5f }, { 0.f, 0.f, -1.f }, { 0.f, 0.f } }, // Front
|
||||
{ { -.5f, .5f, -.5f }, { 0.f, 0.f, -1.f }, { 0.f, 1.f } },
|
||||
{ { .5f, -.5f, -.5f }, { 0.f, 0.f, -1.f }, { 1.f, 0.f } },
|
||||
{ { .5f, .5f, -.5f }, { 0.f, 0.f, -1.f }, { 1.f, 1.f } },
|
||||
{ { .5f, .5f, -.5f }, { 1.f, 0.f, 0.f }, { 0.f, 1.f } }, // Right
|
||||
{ { .5f, .5f, .5f }, { 1.f, 0.f, 0.f }, { 1.f, 1.f } },
|
||||
{ { .5f, -.5f, -.5f }, { 1.f, 0.f, 0.f }, { 0.f, 0.f } },
|
||||
{ { .5f, -.5f, .5f }, { 1.f, 0.f, 0.f }, { 1.f, 0.f } },
|
||||
{ { .5f, -.5f, .5f }, { 0.f, 0.f, 1.f }, { 0.f, 0.f } }, // Back
|
||||
{ { .5f, .5f, .5f }, { 0.f, 0.f, 1.f }, { 0.f, 1.f } },
|
||||
{ { -.5f, -.5f, .5f }, { 0.f, 0.f, 1.f }, { 1.f, 0.f } },
|
||||
{ { -.5f, .5f, .5f }, { 0.f, 0.f, 1.f }, { 1.f, 1.f } },
|
||||
{ { -.5f, .5f, .5f }, { -1.f, 0.f, 0.f }, { 0.f, 1.f } }, // Left
|
||||
{ { -.5f, .5f, -.5f }, { -1.f, 0.f, 0.f }, { 1.f, 1.f } },
|
||||
{ { -.5f, -.5f, .5f }, { -1.f, 0.f, 0.f }, { 0.f, 0.f } },
|
||||
{ { -.5f, -.5f, -.5f }, { -1.f, 0.f, 0.f }, { 1.f, 0.f } },
|
||||
{ { -.5f, -.5f, -.5f }, { 0.f, -1.f, 0.f }, { 0.f, 0.f } }, // Bottom
|
||||
{ { .5f, -.5f, -.5f }, { 0.f, -1.f, 0.f }, { 1.f, 0.f } },
|
||||
{ { -.5f, -.5f, .5f }, { 0.f, -1.f, 0.f }, { 0.f, 1.f } },
|
||||
{ { .5f, -.5f, .5f }, { 0.f, -1.f, 0.f }, { 1.f, 1.f } },
|
||||
{ { -.5f, .5f, -.5f }, { 0.f, 1.f, 0.f }, { 0.f, 1.f } }, // Top
|
||||
{ { -.5f, .5f, .5f }, { 0.f, 1.f, 0.f }, { 0.f, 0.f } },
|
||||
{ { .5f, .5f, -.5f }, { 0.f, 1.f, 0.f }, { 1.f, 1.f } },
|
||||
{ { .5f, .5f, .5f }, { 0.f, 1.f, 0.f }, { 1.f, 0.f } }
|
||||
};
|
||||
|
||||
uint16_t indexData[] = {
|
||||
0, 1, 2, 2, 1, 3,
|
||||
4, 5, 6, 6, 5, 7,
|
||||
8, 9, 10, 10, 9, 11,
|
||||
12, 13, 14, 14, 13, 15,
|
||||
16, 17, 18, 18, 17, 19,
|
||||
20, 21, 22, 22, 21, 23
|
||||
};
|
||||
|
||||
lovrPassDraw(pass, &(Draw) {
|
||||
.mode = GPU_DRAW_TRIANGLES,
|
||||
.transform = transform,
|
||||
.vertex.format = VERTEX_SHAPE,
|
||||
.vertex.pointer = (void**) &vertices,
|
||||
.vertex.count = COUNTOF(vertexData),
|
||||
.index.pointer = (void**) &indices,
|
||||
.index.count = COUNTOF(indexData)
|
||||
});
|
||||
|
||||
memcpy(vertices, vertexData, sizeof(vertexData));
|
||||
memcpy(indices, indexData, sizeof(indexData));
|
||||
}
|
||||
|
||||
void lovrPassClearBuffer(Pass* pass, Buffer* buffer, uint32_t offset, uint32_t extent) {
|
||||
if (extent == 0) return;
|
||||
if (extent == ~0u) extent = buffer->size - offset;
|
||||
|
|
|
@ -391,6 +391,7 @@ void lovrPassSendSampler(Pass* pass, const char* name, size_t length, uint32_t s
|
|||
void lovrPassPoints(Pass* pass, uint32_t count, float** vertices);
|
||||
void lovrPassLine(Pass* pass, uint32_t count, float** vertices);
|
||||
void lovrPassPlane(Pass* pass, float* transform, uint32_t cols, uint32_t rows);
|
||||
void lovrPassBox(Pass* pass, float* transform);
|
||||
void lovrPassClearBuffer(Pass* pass, Buffer* buffer, uint32_t offset, uint32_t extent);
|
||||
void lovrPassClearTexture(Pass* pass, Texture* texture, float value[4], uint32_t layer, uint32_t layerCount, uint32_t level, uint32_t levelCount);
|
||||
void lovrPassCopyDataToBuffer(Pass* pass, void* data, Buffer* buffer, uint32_t offset, uint32_t size);
|
||||
|
|
Loading…
Reference in New Issue