mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-17 23:47:40 +00:00
D3D9 rectangle rendering fix (maxindex)
This commit is contained in:
parent
8a574e5cd2
commit
c2500744e1
@ -122,7 +122,7 @@ static bool IsReallyAClear(const TransformedVertex *transformed, int numVerts) {
|
|||||||
|
|
||||||
void SoftwareTransform(
|
void SoftwareTransform(
|
||||||
int prim, u8 *decoded, int vertexCount, u32 vertType, u16 *&inds, int indexType,
|
int prim, u8 *decoded, int vertexCount, u32 vertType, u16 *&inds, int indexType,
|
||||||
const DecVtxFormat &decVtxFormat, int maxIndex, FramebufferManagerCommon *fbman, TextureCacheCommon *texCache, TransformedVertex *transformed, TransformedVertex *transformedExpanded, TransformedVertex *&drawBuffer, int &numTrans, bool &drawIndexed, SoftwareTransformResult *result) {
|
const DecVtxFormat &decVtxFormat, int &maxIndex, FramebufferManagerCommon *fbman, TextureCacheCommon *texCache, TransformedVertex *transformed, TransformedVertex *transformedExpanded, TransformedVertex *&drawBuffer, int &numTrans, bool &drawIndexed, SoftwareTransformResult *result) {
|
||||||
bool throughmode = (vertType & GE_VTYPE_THROUGH_MASK) != 0;
|
bool throughmode = (vertType & GE_VTYPE_THROUGH_MASK) != 0;
|
||||||
bool lmode = gstate.isUsingSecondaryColor() && gstate.isLightingEnabled();
|
bool lmode = gstate.isUsingSecondaryColor() && gstate.isLightingEnabled();
|
||||||
|
|
||||||
@ -465,6 +465,7 @@ void SoftwareTransform(
|
|||||||
const u16 *indsIn = (const u16 *)inds;
|
const u16 *indsIn = (const u16 *)inds;
|
||||||
u16 *newInds = inds + vertexCount;
|
u16 *newInds = inds + vertexCount;
|
||||||
u16 *indsOut = newInds;
|
u16 *indsOut = newInds;
|
||||||
|
maxIndex = 4 * vertexCount;
|
||||||
for (int i = 0; i < vertexCount; i += 2) {
|
for (int i = 0; i < vertexCount; i += 2) {
|
||||||
const TransformedVertex &transVtxTL = transformed[indsIn[i + 0]];
|
const TransformedVertex &transVtxTL = transformed[indsIn[i + 0]];
|
||||||
const TransformedVertex &transVtxBR = transformed[indsIn[i + 1]];
|
const TransformedVertex &transVtxBR = transformed[indsIn[i + 1]];
|
||||||
|
@ -38,5 +38,5 @@ struct SoftwareTransformResult {
|
|||||||
u8 stencilValue;
|
u8 stencilValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
void SoftwareTransform(int prim, u8 *decoded, int vertexCount, u32 vertexType, u16 *&inds, int indexType, const DecVtxFormat &decVtxFormat, int maxIndex, FramebufferManagerCommon *fbman, TextureCacheCommon *texCache, TransformedVertex *transformed, TransformedVertex *transformedExpanded, TransformedVertex *&drawBuffer,
|
void SoftwareTransform(int prim, u8 *decoded, int vertexCount, u32 vertexType, u16 *&inds, int indexType, const DecVtxFormat &decVtxFormat, int &maxIndex, FramebufferManagerCommon *fbman, TextureCacheCommon *texCache, TransformedVertex *transformed, TransformedVertex *transformedExpanded, TransformedVertex *&drawBuffer,
|
||||||
int &numTrans, bool &drawIndexed, SoftwareTransformResult *result);
|
int &numTrans, bool &drawIndexed, SoftwareTransformResult *result);
|
||||||
|
@ -831,10 +831,11 @@ rotateVBO:
|
|||||||
SoftwareTransformResult result;
|
SoftwareTransformResult result;
|
||||||
memset(&result, 0, sizeof(result));
|
memset(&result, 0, sizeof(result));
|
||||||
|
|
||||||
|
int maxIndex = indexGen.MaxIndex();
|
||||||
SoftwareTransform(
|
SoftwareTransform(
|
||||||
prim, decoded, indexGen.VertexCount(),
|
prim, decoded, indexGen.VertexCount(),
|
||||||
dec_->VertexType(), inds, GE_VTYPE_IDX_16BIT, dec_->GetDecVtxFmt(),
|
dec_->VertexType(), inds, GE_VTYPE_IDX_16BIT, dec_->GetDecVtxFmt(),
|
||||||
indexGen.MaxIndex(), framebufferManager_, textureCache_, transformed, transformedExpanded, drawBuffer, numTrans, drawIndexed, &result);
|
maxIndex, framebufferManager_, textureCache_, transformed, transformedExpanded, drawBuffer, numTrans, drawIndexed, &result);
|
||||||
|
|
||||||
if (result.action == SW_DRAW_PRIMITIVES) {
|
if (result.action == SW_DRAW_PRIMITIVES) {
|
||||||
if (result.setStencil) {
|
if (result.setStencil) {
|
||||||
@ -849,7 +850,7 @@ rotateVBO:
|
|||||||
|
|
||||||
pD3Ddevice->SetVertexDeclaration(pSoftVertexDecl);
|
pD3Ddevice->SetVertexDeclaration(pSoftVertexDecl);
|
||||||
if (drawIndexed) {
|
if (drawIndexed) {
|
||||||
pD3Ddevice->DrawIndexedPrimitiveUP(glprim[prim], 0, indexGen.MaxIndex(), D3DPrimCount(glprim[prim], numTrans), inds, D3DFMT_INDEX16, drawBuffer, sizeof(TransformedVertex));
|
pD3Ddevice->DrawIndexedPrimitiveUP(glprim[prim], 0, maxIndex, D3DPrimCount(glprim[prim], numTrans), inds, D3DFMT_INDEX16, drawBuffer, sizeof(TransformedVertex));
|
||||||
} else {
|
} else {
|
||||||
pD3Ddevice->DrawPrimitiveUP(glprim[prim], D3DPrimCount(glprim[prim], numTrans), drawBuffer, sizeof(TransformedVertex));
|
pD3Ddevice->DrawPrimitiveUP(glprim[prim], D3DPrimCount(glprim[prim], numTrans), drawBuffer, sizeof(TransformedVertex));
|
||||||
}
|
}
|
||||||
|
@ -821,10 +821,11 @@ rotateVBO:
|
|||||||
SoftwareTransformResult result;
|
SoftwareTransformResult result;
|
||||||
memset(&result, 0, sizeof(result));
|
memset(&result, 0, sizeof(result));
|
||||||
|
|
||||||
|
int maxIndex = indexGen.MaxIndex();
|
||||||
SoftwareTransform(
|
SoftwareTransform(
|
||||||
prim, decoded, indexGen.VertexCount(),
|
prim, decoded, indexGen.VertexCount(),
|
||||||
dec_->VertexType(), inds, GE_VTYPE_IDX_16BIT, dec_->GetDecVtxFmt(),
|
dec_->VertexType(), inds, GE_VTYPE_IDX_16BIT, dec_->GetDecVtxFmt(),
|
||||||
indexGen.MaxIndex(), framebufferManager_, textureCache_, transformed, transformedExpanded, drawBuffer, numTrans, drawIndexed, &result);
|
maxIndex, framebufferManager_, textureCache_, transformed, transformedExpanded, drawBuffer, numTrans, drawIndexed, &result);
|
||||||
|
|
||||||
if (result.action == SW_DRAW_PRIMITIVES) {
|
if (result.action == SW_DRAW_PRIMITIVES) {
|
||||||
if (result.setStencil) {
|
if (result.setStencil) {
|
||||||
@ -844,7 +845,8 @@ rotateVBO:
|
|||||||
#if 1 // USING_GLES2
|
#if 1 // USING_GLES2
|
||||||
glDrawElements(glprim[prim], numTrans, GL_UNSIGNED_SHORT, inds);
|
glDrawElements(glprim[prim], numTrans, GL_UNSIGNED_SHORT, inds);
|
||||||
#else
|
#else
|
||||||
glDrawRangeElements(glprim[prim], 0, indexGen.MaxIndex(), numTrans, GL_UNSIGNED_SHORT, inds);
|
// This doesn't seem to provide much of a win.
|
||||||
|
glDrawRangeElements(glprim[prim], 0, maxIndex, numTrans, GL_UNSIGNED_SHORT, inds);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
glDrawArrays(glprim[prim], 0, numTrans);
|
glDrawArrays(glprim[prim], 0, numTrans);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user