summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/VertexManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/OGL/VertexManager.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/VertexManager.cpp48
1 files changed, 2 insertions, 46 deletions
diff --git a/Source/Core/VideoBackends/OGL/VertexManager.cpp b/Source/Core/VideoBackends/OGL/VertexManager.cpp
index d3a8d91bca..427a5ecee3 100644
--- a/Source/Core/VideoBackends/OGL/VertexManager.cpp
+++ b/Source/Core/VideoBackends/OGL/VertexManager.cpp
@@ -42,13 +42,6 @@ static size_t s_index_offset;
VertexManager::VertexManager()
{
- LocalVBuffer.resize(MAXVBUFFERSIZE);
-
- s_pCurBufferPointer = s_pBaseBufferPointer = &LocalVBuffer[0];
- s_pEndBufferPointer = s_pBaseBufferPointer + LocalVBuffer.size();
-
- LocalIBuffer.resize(MAXIBUFFERSIZE);
-
CreateDeviceObjects();
}
@@ -138,7 +131,6 @@ void VertexManager::vFlush(bool useDstAlpha)
{
GLVertexFormat *nativeVertexFmt = (GLVertexFormat*)VertexLoaderManager::GetCurrentVertexFormat();
u32 stride = nativeVertexFmt->GetVertexStride();
- u32 indices = IndexGenerator::GetIndexLen();
if (m_last_vao != nativeVertexFmt->VAO)
{
@@ -148,45 +140,9 @@ void VertexManager::vFlush(bool useDstAlpha)
PrepareDrawBuffers(stride);
- if (!bpmem.genMode.zfreeze && indices >= 3)
+ if (!bpmem.genMode.zfreeze && IndexGenerator::GetIndexLen() >= 3)
{
- float vtx[9];
- float out[12];
-
- // Lookup vertices of the last rendered triangle and software-transform them
- // This allows us to determine the depth slope, which will be used if zfreeze
- // is enabled in the following flush.
- for (unsigned int i = 0; i < 3; ++i)
- {
- const int base_index = GetIndexBuffer()[indices - 3 + i];
- u8* vtx_ptr = &((u8*)GetVertexBuffer())[base_index * stride];
- vtx[0 + i * 3] = ((float*)vtx_ptr)[0];
- vtx[1 + i * 3] = ((float*)vtx_ptr)[1];
- vtx[2 + i * 3] = ((float*)vtx_ptr)[2];
-
- VertexShaderManager::TransformToClipSpace(&vtx[i * 3], &out[i * 4]);
-
- // viewport offset ignored because we only look at coordinate differences.
- out[0 + i * 4] = out[0 + i * 4] / out[3 + i * 4] * xfmem.viewport.wd;
- out[1 + i * 4] = out[1 + i * 4] / out[3 + i * 4] * xfmem.viewport.ht;
- out[2 + i * 4] = out[2 + i * 4] / out[3 + i * 4] * xfmem.viewport.zRange + xfmem.viewport.farZ;
- }
- float dx31 = out[8] - out[0];
- float dx12 = out[0] - out[4];
- float dy12 = out[1] - out[5];
- float dy31 = out[9] - out[1];
-
- float DF31 = out[10] - out[2];
- float DF21 = out[6] - out[2];
- float a = DF31 * -dy12 - DF21 * dy31;
- float b = dx31 * DF21 + dx12 * DF31;
- float c = -dx12 * dy31 - dx31 * -dy12;
-
- float slope_dfdx = -a / c;
- float slope_dfdy = -b / c;
- float slope_f0 = out[2];
-
- PixelShaderManager::SetZSlopeChanged(slope_dfdx, slope_dfdy, slope_f0);
+ CalculateZSlope(stride);
}
// Makes sure we can actually do Dual source blending