22 #include "precompiled.h"
29 #define DUMP_VB_STATS 0 // for debugging
39 typedef std::list<CVertexBuffer*>::iterator Iter;
54 ENSURE(usage == GL_STREAM_DRAW || usage == GL_STATIC_DRAW || usage == GL_DYNAMIC_DRAW);
56 ENSURE(target == GL_ARRAY_BUFFER || target == GL_ELEMENT_ARRAY_BUFFER);
60 typedef std::list<CVertexBuffer*>::iterator Iter;
63 debug_printf(L
"\n============================\n# allocate vsize=%d nverts=%d\n\n", vertexSize, numVertices);
78 result = buffer->
Allocate(vertexSize, numVertices, usage, target);
86 result = buffer->
Allocate(vertexSize, numVertices, usage, target);
90 LOGERROR(L
"Failed to create VBOs (%lu*%lu)", (
unsigned long)vertexSize, (
unsigned long)numVertices);
102 debug_printf(L
"\n============================\n# release %p nverts=%d\n\n", chunk, chunk->
m_Count);
112 typedef std::list<CVertexBuffer*>::iterator Iter;
114 total += (*iter)->GetBytesReserved();
123 typedef std::list<CVertexBuffer*>::iterator Iter;
125 total += (*iter)->GetBytesAllocated();
void Shutdown()
Explicit shutdown of the vertex buffer subsystem; releases all currently-allocated buffers...
CVertexBufferManager g_VBMan
VBChunk: describes a portion of this vertex buffer.
CVertexBuffer: encapsulation of ARB_vertex_buffer_object, also supplying some additional functionalit...
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
CVertexBuffer::VBChunk * Allocate(size_t vertexSize, size_t numVertices, GLenum usage, GLenum target)
Try to allocate a vertex buffer of the given size and type.
void Release(VBChunk *chunk)
Return given chunk to this buffer.
size_t m_Count
Number of vertices used by chunk.
void Release(CVertexBuffer::VBChunk *chunk)
Returns the given chunk to its owning buffer.
size_t GetBytesReserved()
CVertexBuffer * m_Owner
Owning (parent) vertex buffer.
std::list< CVertexBuffer * > m_Buffers
List of all known vertex buffers.
bool CompatibleVertexType(size_t vertexSize, GLenum usage, GLenum target)
Returns true if this vertex buffer is compatible with the specified vertex type and intended usage...
VBChunk * Allocate(size_t vertexSize, size_t numVertices, GLenum usage, GLenum target)
Try to allocate a buffer of given number of vertices (each of given size), and with the given type - ...
size_t GetBytesAllocated()
void debug_printf(const wchar_t *fmt,...)
write a formatted string to the debug channel, subject to filtering (see below).