diff options
Diffstat (limited to 'Source/Core/VideoBackends/OGL/VertexManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/VertexManager.cpp | 48 |
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 |
