VideoCommon: allow backends to set the buffer pointer as they want to
This commit is contained in:
parent
128fcdac26
commit
52feed04db
|
@ -24,6 +24,8 @@ u8 *VertexManager::s_pEndBufferPointer;
|
||||||
|
|
||||||
PrimitiveType VertexManager::current_primitive_type;
|
PrimitiveType VertexManager::current_primitive_type;
|
||||||
|
|
||||||
|
bool VertexManager::IsFlushed;
|
||||||
|
|
||||||
static const PrimitiveType primitive_from_gx[8] = {
|
static const PrimitiveType primitive_from_gx[8] = {
|
||||||
PRIMITIVE_TRIANGLES, // GX_DRAW_QUADS
|
PRIMITIVE_TRIANGLES, // GX_DRAW_QUADS
|
||||||
PRIMITIVE_TRIANGLES, // GX_DRAW_NONE
|
PRIMITIVE_TRIANGLES, // GX_DRAW_NONE
|
||||||
|
@ -43,14 +45,14 @@ VertexManager::VertexManager()
|
||||||
|
|
||||||
LocalIBuffer.resize(MAXIBUFFERSIZE);
|
LocalIBuffer.resize(MAXIBUFFERSIZE);
|
||||||
|
|
||||||
ResetBuffer();
|
IsFlushed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexManager::~VertexManager()
|
VertexManager::~VertexManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexManager::ResetBuffer()
|
void VertexManager::ResetBuffer(u32 stride)
|
||||||
{
|
{
|
||||||
s_pCurBufferPointer = s_pBaseBufferPointer;
|
s_pCurBufferPointer = s_pBaseBufferPointer;
|
||||||
IndexGenerator::Start(GetIndexBuffer());
|
IndexGenerator::Start(GetIndexBuffer());
|
||||||
|
@ -84,11 +86,13 @@ void VertexManager::PrepareForAdditionalData(int primitive, u32 count, u32 strid
|
||||||
ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all vertices! "
|
ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all vertices! "
|
||||||
"Increase MAXVBUFFERSIZE or we need primitive breaking after all.");
|
"Increase MAXVBUFFERSIZE or we need primitive breaking after all.");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool VertexManager::IsFlushed() const
|
// need to alloc new buffer
|
||||||
{
|
if(IsFlushed)
|
||||||
return s_pBaseBufferPointer == s_pCurBufferPointer;
|
{
|
||||||
|
g_vertex_manager->ResetBuffer(stride);
|
||||||
|
IsFlushed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 VertexManager::GetRemainingIndices(int primitive)
|
u32 VertexManager::GetRemainingIndices(int primitive)
|
||||||
|
@ -160,8 +164,7 @@ void VertexManager::AddVertices(int primitive, u32 numVertices)
|
||||||
|
|
||||||
void VertexManager::Flush()
|
void VertexManager::Flush()
|
||||||
{
|
{
|
||||||
if (g_vertex_manager->IsFlushed())
|
if (IsFlushed) return;
|
||||||
return;
|
|
||||||
|
|
||||||
// loading a state will invalidate BP, so check for it
|
// loading a state will invalidate BP, so check for it
|
||||||
g_video_backend->CheckInvalidState();
|
g_video_backend->CheckInvalidState();
|
||||||
|
@ -238,7 +241,7 @@ void VertexManager::Flush()
|
||||||
// TODO: need to merge more stuff into VideoCommon
|
// TODO: need to merge more stuff into VideoCommon
|
||||||
g_vertex_manager->vFlush();
|
g_vertex_manager->vFlush();
|
||||||
|
|
||||||
g_vertex_manager->ResetBuffer();
|
IsFlushed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexManager::DoState(PointerWrap& p)
|
void VertexManager::DoState(PointerWrap& p)
|
||||||
|
|
|
@ -59,10 +59,10 @@ protected:
|
||||||
|
|
||||||
static PrimitiveType current_primitive_type;
|
static PrimitiveType current_primitive_type;
|
||||||
|
|
||||||
private:
|
virtual void ResetBuffer(u32 stride);
|
||||||
bool IsFlushed() const;
|
|
||||||
|
|
||||||
void ResetBuffer();
|
private:
|
||||||
|
static bool IsFlushed;
|
||||||
|
|
||||||
//virtual void Draw(u32 stride, bool alphapass) = 0;
|
//virtual void Draw(u32 stride, bool alphapass) = 0;
|
||||||
// temp
|
// temp
|
||||||
|
|
Loading…
Reference in New Issue