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:
parent
89adcf8b97
commit
98d6944c22
2 changed files with 25 additions and 113 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue