mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-20 17:59:08 +02:00
Isolate most of the softgpu specialization code to RasterizerRectangle.
See comments.
This commit is contained in:
1 parent
b4438c5742
commit
970adfbcc9
12 files changed
+369
-281
No files matched your search
@@ -27,6 +27,7 @@
|
||||
#include "GPU/Software/TransformUnit.h"
|
||||
#include "GPU/Software/Clipper.h"
|
||||
#include "GPU/Software/Lighting.h"
|
||||
#include "GPU/Software/RasterizerRectangle.h"
|
||||
|
||||
#define TRANSFORM_BUF_SIZE (65536 * 48)
|
||||
|
||||
@@ -451,44 +452,8 @@ void TransformUnit::SubmitPrimitive(void* vertices, void* indices, GEPrimitiveTy
|
||||
data[vtx] = ReadVertex(vreader);
|
||||
}
|
||||
|
||||
// OK, now let's look at data to detect rectangles. There are a few possibilities
|
||||
// but we focus on Darkstalkers for now.
|
||||
if (data[0].screenpos.x == data[1].screenpos.x &&
|
||||
data[0].screenpos.y == data[2].screenpos.y &&
|
||||
data[2].screenpos.x == data[3].screenpos.x &&
|
||||
data[1].screenpos.y == data[3].screenpos.y &&
|
||||
data[1].screenpos.y > data[0].screenpos.y && // Avoid rotation handling
|
||||
data[2].screenpos.x > data[0].screenpos.x &&
|
||||
data[0].texturecoords.x == data[1].texturecoords.x &&
|
||||
data[0].texturecoords.y == data[2].texturecoords.y &&
|
||||
data[2].texturecoords.x == data[3].texturecoords.x &&
|
||||
data[1].texturecoords.y == data[3].texturecoords.y &&
|
||||
data[1].texturecoords.y > data[0].texturecoords.y &&
|
||||
data[2].texturecoords.x > data[0].texturecoords.x &&
|
||||
data[0].color0 == data[1].color0 &&
|
||||
data[1].color0 == data[2].color0 &&
|
||||
data[2].color0 == data[3].color0) {
|
||||
// It's a rectangle!
|
||||
Clipper::ProcessRect(data[0], data[3]);
|
||||
break;
|
||||
}
|
||||
// There's the other vertex order too...
|
||||
if (data[0].screenpos.x == data[2].screenpos.x &&
|
||||
data[0].screenpos.y == data[1].screenpos.y &&
|
||||
data[1].screenpos.x == data[3].screenpos.x &&
|
||||
data[2].screenpos.y == data[3].screenpos.y &&
|
||||
data[2].screenpos.y > data[0].screenpos.y && // Avoid rotation handling
|
||||
data[1].screenpos.x > data[0].screenpos.x &&
|
||||
data[0].texturecoords.x == data[2].texturecoords.x &&
|
||||
data[0].texturecoords.y == data[1].texturecoords.y &&
|
||||
data[1].texturecoords.x == data[3].texturecoords.x &&
|
||||
data[2].texturecoords.y == data[3].texturecoords.y &&
|
||||
data[2].texturecoords.y > data[0].texturecoords.y &&
|
||||
data[1].texturecoords.x > data[0].texturecoords.x &&
|
||||
data[0].color0 == data[1].color0 &&
|
||||
data[1].color0 == data[2].color0 &&
|
||||
data[2].color0 == data[3].color0) {
|
||||
// It's a rectangle!
|
||||
// If a strip is effectively a rectangle, draw it as such!
|
||||
if (Rasterizer::DetectRectangleFromThroughModeStrip(data)) {
|
||||
Clipper::ProcessRect(data[0], data[3]);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user