mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Better Bezier patch fix
This commit is contained in:
parent
42ec8bc3ef
commit
df045e418c
1 changed files with 14 additions and 9 deletions
|
@ -20,7 +20,10 @@
|
||||||
|
|
||||||
// Just to get something on the screen, we'll just not subdivide correctly.
|
// Just to get something on the screen, we'll just not subdivide correctly.
|
||||||
void TransformDrawEngine::DrawBezier(int ucount, int vcount) {
|
void TransformDrawEngine::DrawBezier(int ucount, int vcount) {
|
||||||
u16 indices[3 * 3 * 6];
|
if ((ucount - 1) % 3 != 0 || (vcount - 1) % 3 != 0)
|
||||||
|
ERROR_LOG_REPORT(HLE,"Unsupported bezier parameters ucount=%i, vcount=%i", ucount, vcount);
|
||||||
|
|
||||||
|
u16 *indices = new u16[ucount * vcount * 6];
|
||||||
|
|
||||||
static bool reported = false;
|
static bool reported = false;
|
||||||
if (!reported) {
|
if (!reported) {
|
||||||
|
@ -31,14 +34,14 @@ void TransformDrawEngine::DrawBezier(int ucount, int vcount) {
|
||||||
// if (gstate.patchprimitive)
|
// if (gstate.patchprimitive)
|
||||||
// Generate indices for a rectangular mesh.
|
// Generate indices for a rectangular mesh.
|
||||||
int c = 0;
|
int c = 0;
|
||||||
for (int y = 0; y < 3; y++) {
|
for (int y = 0; y < ucount; y++) {
|
||||||
for (int x = 0; x < 3; x++) {
|
for (int x = 0; x < vcount - 1; x++) {
|
||||||
indices[c++] = y * 3 + x;
|
indices[c++] = y * (vcount - 1)+ x;
|
||||||
indices[c++] = y * 3 + x + 1;
|
indices[c++] = y * (vcount - 1) + x + 1;
|
||||||
indices[c++] = (y + 1) * 3 + x + 1;
|
indices[c++] = (y + 1) * (vcount - 1) + x + 1;
|
||||||
indices[c++] = (y + 1) * 3 + x + 1;
|
indices[c++] = (y + 1) * (vcount - 1) + x + 1;
|
||||||
indices[c++] = (y + 1) * 3 + x;
|
indices[c++] = (y + 1) * (vcount - 1) + x;
|
||||||
indices[c++] = y * 3 + x;
|
indices[c++] = y * (vcount - 1) + x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +69,8 @@ void TransformDrawEngine::DrawBezier(int ucount, int vcount) {
|
||||||
SubmitPrim(Memory::GetPointer(gstate_c.vertexAddr), &indices[0], GE_PRIM_TRIANGLES, c, gstate.vertType, GE_VTYPE_IDX_16BIT, 0);
|
SubmitPrim(Memory::GetPointer(gstate_c.vertexAddr), &indices[0], GE_PRIM_TRIANGLES, c, gstate.vertType, GE_VTYPE_IDX_16BIT, 0);
|
||||||
}
|
}
|
||||||
Flush(); // as our vertex storage here is temporary, it will only survive one draw.
|
Flush(); // as our vertex storage here is temporary, it will only survive one draw.
|
||||||
|
|
||||||
|
delete [] indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue