DrawCommand -> DrawRequest;

This commit is contained in:
bjorn 2018-12-24 18:44:38 -08:00 committed by Bjorn Swenson
parent 779e28353d
commit 2ceb474b04
4 changed files with 24 additions and 24 deletions

View File

@ -76,7 +76,7 @@ int l_lovrMeshDraw(lua_State* L) {
float transform[16]; float transform[16];
int index = luax_readmat4(L, 2, transform, 1, NULL); int index = luax_readmat4(L, 2, transform, 1, NULL);
int instances = luaL_optinteger(L, index, 1); int instances = luaL_optinteger(L, index, 1);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.mesh = mesh, .mesh = mesh,
.material = lovrMeshGetMaterial(mesh), .material = lovrMeshGetMaterial(mesh),

View File

@ -21,8 +21,8 @@ static void onResizeWindow(int width, int height) {
state.height = height; state.height = height;
} }
static bool batchable(DrawCommand* a) { static bool batchable(DrawRequest* a) {
DrawCommand* b = &state.batch; DrawRequest* b = &state.batch;
if (a->instances > 1) return false; if (a->instances > 1) return false;
if (a->mesh != b->mesh) return false; if (a->mesh != b->mesh) return false;
if (!a->mesh && a->mode != b->mode) return false; if (!a->mesh && a->mode != b->mode) return false;
@ -459,7 +459,7 @@ void lovrGraphicsFlush() {
} }
// Resolve objects // Resolve objects
DrawCommand* draw = &state.batch; DrawRequest* draw = &state.batch;
Mesh* mesh = draw->mesh ? draw->mesh : state.defaultMesh; Mesh* mesh = draw->mesh ? draw->mesh : state.defaultMesh;
Canvas* canvas = state.pipeline->canvas ? state.pipeline->canvas : state.camera.canvas; Canvas* canvas = state.pipeline->canvas ? state.pipeline->canvas : state.camera.canvas;
Material* material = draw->material ? draw->material : (state.defaultMaterial ? state.defaultMaterial : (state.defaultMaterial = lovrMaterialCreate())); Material* material = draw->material ? draw->material : (state.defaultMaterial ? state.defaultMaterial : (state.defaultMaterial = lovrMaterialCreate()));
@ -537,13 +537,13 @@ void lovrGraphicsFlush() {
state.batchIndex = state.indexCursor; state.batchIndex = state.indexCursor;
} }
void lovrGraphicsDraw(DrawCommand* draw) { void lovrGraphicsDraw(DrawRequest* draw) {
if (state.batchSize > 0 && !batchable(draw)) { if (state.batchSize > 0 && !batchable(draw)) {
lovrGraphicsFlush(); lovrGraphicsFlush();
} }
if (state.batchSize == 0) { if (state.batchSize == 0) {
memcpy(&state.batch, draw, sizeof(DrawCommand)); memcpy(&state.batch, draw, sizeof(DrawRequest));
} else if (draw->mesh && draw->instances <= 1) { } else if (draw->mesh && draw->instances <= 1) {
state.batch.instances++; state.batch.instances++;
} }
@ -593,14 +593,14 @@ void lovrGraphicsDraw(DrawCommand* draw) {
} }
void lovrGraphicsPoints(uint32_t count) { void lovrGraphicsPoints(uint32_t count) {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.mode = DRAW_POINTS, .mode = DRAW_POINTS,
.vertex.count = count .vertex.count = count
}); });
} }
void lovrGraphicsLine(uint32_t count) { void lovrGraphicsLine(uint32_t count) {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.mode = DRAW_LINE_STRIP, .mode = DRAW_LINE_STRIP,
.vertex.count = count .vertex.count = count
}); });
@ -608,7 +608,7 @@ void lovrGraphicsLine(uint32_t count) {
void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9]) { void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9]) {
if (style == STYLE_LINE) { if (style == STYLE_LINE) {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.material = material, .material = material,
.mode = DRAW_LINE_LOOP, .mode = DRAW_LINE_LOOP,
.vertex.count = 3, .vertex.count = 3,
@ -621,7 +621,7 @@ void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9])
} else { } else {
float normal[3]; float normal[3];
vec3_cross(vec3_init(normal, &points[0]), &points[3]); vec3_cross(vec3_init(normal, &points[0]), &points[3]);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.material = material, .material = material,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
.vertex.count = 3, .vertex.count = 3,
@ -636,7 +636,7 @@ void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9])
void lovrGraphicsPlane(DrawStyle style, Material* material, mat4 transform) { void lovrGraphicsPlane(DrawStyle style, Material* material, mat4 transform) {
if (style == STYLE_LINE) { if (style == STYLE_LINE) {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = DRAW_LINE_LOOP, .mode = DRAW_LINE_LOOP,
@ -649,7 +649,7 @@ void lovrGraphicsPlane(DrawStyle style, Material* material, mat4 transform) {
} }
}); });
} else { } else {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
@ -668,7 +668,7 @@ void lovrGraphicsPlane(DrawStyle style, Material* material, mat4 transform) {
void lovrGraphicsBox(DrawStyle style, Material* material, mat4 transform) { void lovrGraphicsBox(DrawStyle style, Material* material, mat4 transform) {
if (style == STYLE_LINE) { if (style == STYLE_LINE) {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = DRAW_LINES, .mode = DRAW_LINES,
@ -693,7 +693,7 @@ void lovrGraphicsBox(DrawStyle style, Material* material, mat4 transform) {
} }
}); });
} else { } else {
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
@ -769,7 +769,7 @@ void lovrGraphicsArc(DrawStyle style, ArcMode arcMode, Material* material, mat4
theta += angleShift; theta += angleShift;
} }
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = style == STYLE_LINE ? (arcMode == ARC_MODE_OPEN ? DRAW_LINE_STRIP : DRAW_LINE_LOOP) : DRAW_TRIANGLE_FAN, .mode = style == STYLE_LINE ? (arcMode == ARC_MODE_OPEN ? DRAW_LINE_STRIP : DRAW_LINE_LOOP) : DRAW_TRIANGLE_FAN,
@ -871,7 +871,7 @@ void lovrGraphicsCylinder(Material* material, float x1, float y1, float z1, floa
#undef PUSH_CYLINDER_VERTEX #undef PUSH_CYLINDER_VERTEX
#undef PUSH_CYLINDER_TRIANGLE #undef PUSH_CYLINDER_TRIANGLE
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.material = material, .material = material,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
.vertex.count = vertexCount, .vertex.count = vertexCount,
@ -909,7 +909,7 @@ void lovrGraphicsSphere(Material* material, mat4 transform, int segments) {
} }
} }
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = transform, .transform = transform,
.material = material, .material = material,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
@ -923,7 +923,7 @@ void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float
lovrAssert(type == TEXTURE_CUBE || type == TEXTURE_2D, "Only 2D and cube textures can be used as skyboxes"); lovrAssert(type == TEXTURE_CUBE || type == TEXTURE_2D, "Only 2D and cube textures can be used as skyboxes");
lovrGraphicsPushPipeline(); lovrGraphicsPushPipeline();
lovrGraphicsSetWinding(WINDING_COUNTERCLOCKWISE); lovrGraphicsSetWinding(WINDING_COUNTERCLOCKWISE);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.shader = type == TEXTURE_CUBE ? SHADER_CUBE : SHADER_PANO, .shader = type == TEXTURE_CUBE ? SHADER_CUBE : SHADER_PANO,
.diffuseTexture = type == TEXTURE_2D ? texture : NULL, .diffuseTexture = type == TEXTURE_2D ? texture : NULL,
.environmentMap = type == TEXTURE_CUBE ? texture : NULL, .environmentMap = type == TEXTURE_CUBE ? texture : NULL,
@ -954,7 +954,7 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
lovrGraphicsTranslate((float[3]) { 0, offsety, 0 }); lovrGraphicsTranslate((float[3]) { 0, offsety, 0 });
lovrGraphicsPushPipeline(); lovrGraphicsPushPipeline();
lovrGraphicsSetAlphaSampling(true); lovrGraphicsSetAlphaSampling(true);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.shader = SHADER_FONT, .shader = SHADER_FONT,
.diffuseTexture = font->texture, .diffuseTexture = font->texture,
.mode = DRAW_TRIANGLES, .mode = DRAW_TRIANGLES,
@ -967,7 +967,7 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
void lovrGraphicsFill(Texture* texture, float u, float v, float w, float h) { void lovrGraphicsFill(Texture* texture, float u, float v, float w, float h) {
lovrGraphicsPushPipeline(); lovrGraphicsPushPipeline();
lovrGraphicsSetDepthTest(COMPARE_NONE, false); lovrGraphicsSetDepthTest(COMPARE_NONE, false);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.mono = true, .mono = true,
.shader = SHADER_FILL, .shader = SHADER_FILL,
.diffuseTexture = texture, .diffuseTexture = texture,

View File

@ -133,7 +133,7 @@ typedef struct {
float* pose; float* pose;
int instances; int instances;
bool mono; bool mono;
} DrawCommand; } DrawRequest;
typedef struct { typedef struct {
bool initialized; bool initialized;
@ -151,7 +151,7 @@ typedef struct {
Pipeline pipelines[MAX_PIPELINES]; Pipeline pipelines[MAX_PIPELINES];
Pipeline* pipeline; Pipeline* pipeline;
int pipelineIndex; int pipelineIndex;
DrawCommand batch; DrawRequest batch;
int batchVertex; int batchVertex;
int batchIndex; int batchIndex;
int batchSize; int batchSize;
@ -227,7 +227,7 @@ uint16_t* lovrGraphicsGetIndexPointer(uint32_t count);
void lovrGraphicsClear(Color* color, float* depth, int* stencil); void lovrGraphicsClear(Color* color, float* depth, int* stencil);
void lovrGraphicsDiscard(bool color, bool depth, bool stencil); void lovrGraphicsDiscard(bool color, bool depth, bool stencil);
void lovrGraphicsFlush(); void lovrGraphicsFlush();
void lovrGraphicsDraw(DrawCommand* draw); void lovrGraphicsDraw(DrawRequest* draw);
void lovrGraphicsPoints(uint32_t count); void lovrGraphicsPoints(uint32_t count);
void lovrGraphicsLine(uint32_t count); void lovrGraphicsLine(uint32_t count);
void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9]); void lovrGraphicsTriangle(DrawStyle style, Material* material, float points[9]);

View File

@ -39,7 +39,7 @@ static void renderNode(Model* model, int nodeIndex, int instances) {
} }
lovrMeshSetDrawRange(model->mesh, primitive->drawStart, primitive->drawCount); lovrMeshSetDrawRange(model->mesh, primitive->drawStart, primitive->drawCount);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawRequest) {
.transform = model->nodeTransforms[nodeIndex], .transform = model->nodeTransforms[nodeIndex],
.mesh = model->mesh, .mesh = model->mesh,
.material = lovrMeshGetMaterial(model->mesh), .material = lovrMeshGetMaterial(model->mesh),