TINYGL: Moved rasterization logic inside draw call.

Note: As a side effect to this draw calls are now batched together.
This commit is contained in:
Stefano Musumeci 2014-07-26 17:55:34 +02:00
parent 89adcf8b97
commit 98d6944c22
2 changed files with 25 additions and 113 deletions

View file

@ -221,67 +221,6 @@ void glopVertex(GLContext *c, GLParam *p) {
// edge flag
v->edge_flag = c->current_edge_flag;
switch (c->begin_type) {
case TGL_POINTS:
glIssueDrawCall(new Graphics::RasterizationDrawCall());
n = 0;
break;
case TGL_LINES:
if (n == 2) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
n = 0;
}
break;
case TGL_LINE_STRIP:
case TGL_LINE_LOOP:
if (n == 1) {
c->vertex[2] = c->vertex[0];
} else if (n == 2) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
c->vertex[0] = c->vertex[1];
n = 1;
}
break;
case TGL_TRIANGLES:
if (n == 3) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
n = 0;
}
break;
case TGL_TRIANGLE_STRIP:
if (cnt >= 3) {
if (n == 3)
n = 0;
glIssueDrawCall(new Graphics::RasterizationDrawCall());
}
break;
case TGL_TRIANGLE_FAN:
if (n == 3) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
c->vertex[1] = c->vertex[2];
n = 2;
}
break;
case TGL_QUADS:
if (n == 4) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
n = 0;
}
break;
case TGL_QUAD_STRIP:
if (n == 4) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
for (int i = 0; i < 2; i++)
c->vertex[i] = c->vertex[i + 2];
n = 2;
}
break;
case TGL_POLYGON:
break;
default:
error("glBegin: type %x not handled", c->begin_type);
}
c->vertex_n = n;
}
@ -289,16 +228,7 @@ void glopVertex(GLContext *c, GLParam *p) {
void glopEnd(GLContext *c, GLParam *) {
assert(c->in_begin == 1);
if (c->begin_type == TGL_LINE_LOOP) {
if (c->vertex_cnt >= 3) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
}
} else if (c->begin_type == TGL_POLYGON) {
int i = c->vertex_cnt;
if (i >= 3) {
glIssueDrawCall(new Graphics::RasterizationDrawCall());
}
}
glIssueDrawCall(new Graphics::RasterizationDrawCall());
c->in_begin = 0;
}