GL renderer: Add fallback for when driver doesn't provide glDrawRangeElementsBaseVertex (#617)

* GL: Add fallback for when driver doesn't provide glDrawRangeElementsBaseVertex

* GL: Fix fallback when glDrawRangeElementsBaseVertex is absent
This commit is contained in:
wheremyfoodat 2024-10-23 22:43:58 +03:00 committed by GitHub
parent 54d0618f02
commit cdc61ea95a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 45 additions and 6 deletions

View file

@ -250,4 +250,25 @@ namespace PICA::IndexBuffer {
return analyzePortable<useShortIndices>(indexBuffer, vertexCount);
#endif
}
// In some really unfortunate scenarios (eg Android Studio emulator), we don't have access to glDrawRangeElementsBaseVertex
// So we need to subtract the base vertex index from every index in the index buffer ourselves
// This is not really common, so we do it without SIMD for the moment, just to be able to run on Android Studio
template <bool useShortIndices>
void subtractBaseIndex(u8* indexBuffer, u32 indexCount, u16 baseIndex) {
// Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them
if constexpr (useShortIndices) {
u16* indexBuffer16 = reinterpret_cast<u16*>(indexBuffer);
for (u32 i = 0; i < indexCount; i++) {
indexBuffer16[i] -= baseIndex;
}
} else {
u8 baseIndex8 = u8(baseIndex);
for (u32 i = 0; i < indexCount; i++) {
indexBuffer[i] -= baseIndex8;
}
}
}
} // namespace PICA::IndexBuffer