(view as text)
diff --git a/Source/Core/VideoBackends/D3D/VertexManager.cpp b/Source/Core/VideoBackends/D3D/VertexManager.cpp
index 75ca01a..3ded4e7 100644
--- a/Source/Core/VideoBackends/D3D/VertexManager.cpp
+++ b/Source/Core/VideoBackends/D3D/VertexManager.cpp
@@ -85,11 +85,11 @@ VertexManager::~VertexManager()
 	DestroyDeviceObjects();
 }
 
-void VertexManager::PrepareDrawBuffers()
+void VertexManager::PrepareDrawBuffers(u32 stride)
 {
 	D3D11_MAPPED_SUBRESOURCE map;
 
-	UINT vSize = UINT(s_pCurBufferPointer - s_pBaseBufferPointer);
+	UINT vSize = UINT(IndexGenerator::GetNumVerts() * stride);
 	D3D11_MAP MapType = D3D11_MAP_WRITE_NO_OVERWRITE;
 	if (m_vertex_buffer_cursor + vSize >= VBUFFER_SIZE)
 	{
@@ -101,7 +101,7 @@ void VertexManager::PrepareDrawBuffers()
 
 	D3D::context->Map(m_vertex_buffers[m_current_vertex_buffer], 0, MapType, 0, &map);
 
-	memcpy((u8*)map.pData + m_vertex_buffer_cursor, s_pBaseBufferPointer, vSize);
+	memcpy((u8*)map.pData + m_vertex_buffer_cursor, GetVertexBuffer(), vSize);
 	D3D::context->Unmap(m_vertex_buffers[m_current_vertex_buffer], 0);
 	m_vertex_draw_offset = m_vertex_buffer_cursor;
 	m_vertex_buffer_cursor += vSize;
@@ -208,8 +208,8 @@ void VertexManager::vFlush()
 		GFX_DEBUGGER_PAUSE_LOG_AT(NEXT_ERROR,true,{printf("Fail to set pixel shader\n");});
 		return;
 	}
-	PrepareDrawBuffers();
 	unsigned int stride = g_nativeVertexFmt->GetVertexStride();
+	PrepareDrawBuffers(stride);
 	g_nativeVertexFmt->SetupVertexPointers();
 	g_renderer->ApplyState(useDstAlpha);
 
diff --git a/Source/Core/VideoBackends/D3D/VertexManager.h b/Source/Core/VideoBackends/D3D/VertexManager.h
index 9440c73..9ed4fbc 100644
--- a/Source/Core/VideoBackends/D3D/VertexManager.h
+++ b/Source/Core/VideoBackends/D3D/VertexManager.h
@@ -24,7 +24,7 @@ public:
 
 private:
 
-	void PrepareDrawBuffers();
+	void PrepareDrawBuffers(u32 stride);
 	void Draw(u32 stride);
 	// temp
 	void vFlush();