From 386dd53780a81fff8d492a618780782fd5a0c46d Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Tue, 24 Jan 2012 23:02:35 +0100 Subject: [PATCH] Make VertexBuffers use size_t, raising the limit of vertices that can be stored This means more sprites in SpriteBatches, yay! --- src/modules/graphics/opengl/VertexBuffer.cpp | 21 +++++++--------- src/modules/graphics/opengl/VertexBuffer.h | 26 ++++++++++---------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/modules/graphics/opengl/VertexBuffer.cpp b/src/modules/graphics/opengl/VertexBuffer.cpp index d61300a48..1c48ccbb2 100644 --- a/src/modules/graphics/opengl/VertexBuffer.cpp +++ b/src/modules/graphics/opengl/VertexBuffer.cpp @@ -34,24 +34,21 @@ namespace opengl { // VertexBuffer - VertexBuffer *VertexBuffer::Create(int size, GLenum target, GLenum usage) + VertexBuffer *VertexBuffer::Create(size_t size, GLenum target, GLenum usage) { try { // Try to create a VBO. return new VBO(size, target, usage); - } - catch (const love::Exception &e) + catch (const love::Exception &) { - (void)e; - // VBO not supported ... create regular array. return new VertexArray(size, target, usage); } } - VertexBuffer::VertexBuffer(int size, GLenum target, GLenum usage) + VertexBuffer::VertexBuffer(size_t size, GLenum target, GLenum usage) : size(size) , target(target) , usage(usage) @@ -77,7 +74,7 @@ namespace opengl // VertexArray - VertexArray::VertexArray(int size, GLenum target, GLenum usage) + VertexArray::VertexArray(size_t size, GLenum target, GLenum usage) : VertexBuffer(size, target, usage) , buf(new char[size]) { @@ -105,19 +102,19 @@ namespace opengl { } - void VertexArray::fill(int offset, int size, const void *data) + void VertexArray::fill(size_t offset, size_t size, const void *data) { memcpy(buf + offset, data, size); } - const void *VertexArray::getPointer(int offset) const + const void *VertexArray::getPointer(size_t offset) const { return buf + offset; } // VBO - VBO::VBO(int size, GLenum target, GLenum usage) + VBO::VBO(size_t size, GLenum target, GLenum usage) : VertexBuffer(size, target, usage) , vbo(0) , buffer_copy(0) @@ -165,7 +162,7 @@ namespace opengl glBindBufferARB(getTarget(), 0); } - void VBO::fill(int offset, int size, const void *data) + void VBO::fill(size_t offset, size_t size, const void *data) { if (mapped) memcpy(static_cast(mapped) + offset, data, size); @@ -173,7 +170,7 @@ namespace opengl glBufferSubDataARB(getTarget(), offset, size, data); } - const void *VBO::getPointer(int offset) const + const void *VBO::getPointer(size_t offset) const { return reinterpret_cast(offset); } diff --git a/src/modules/graphics/opengl/VertexBuffer.h b/src/modules/graphics/opengl/VertexBuffer.h index a41a47d8a..f439b82d7 100644 --- a/src/modules/graphics/opengl/VertexBuffer.h +++ b/src/modules/graphics/opengl/VertexBuffer.h @@ -59,7 +59,7 @@ namespace opengl * @param usage GL_DYNAMIC_DRAW, etc. * @return A new VertexBuffer. */ - static VertexBuffer *Create(int size, GLenum target, GLenum usage); + static VertexBuffer *Create(size_t size, GLenum target, GLenum usage); /** * Constructor. @@ -68,7 +68,7 @@ namespace opengl * @param target The target VertexBuffer object, e.g. GL_ARRAY_BUFFER. * @param usage Usage hint, e.g. GL_DYNAMIC_DRAW. */ - VertexBuffer(int size, GLenum target, GLenum usage); + VertexBuffer(size_t size, GLenum target, GLenum usage); /** * Destructor. Does nothing, but must be declared virtual. @@ -80,7 +80,7 @@ namespace opengl * * @return The size of the VertexBuffer. */ - int getSize() const { return size; } + size_t getSize() const { return size; } /** * Get the target buffer object. @@ -139,7 +139,7 @@ namespace opengl * @param size The size of the incoming data. * @param data Pointer to memory to copy data from. */ - virtual void fill(int offset, int size, const void *data) = 0; + virtual void fill(size_t offset, size_t size, const void *data) = 0; /** * Get a pointer which represents the specified byte offset. @@ -147,7 +147,7 @@ namespace opengl * @param offset The byte offset. (0 is first byte). * @return A pointer which represents the offset. */ - virtual const void *getPointer(int offset) const = 0; + virtual const void *getPointer(size_t offset) const = 0; /** * This helper class can bind a VertexArray temporarily, and @@ -176,7 +176,7 @@ namespace opengl private: // The size of the buffer, in bytes. - int size; + size_t size; // The target buffer object. (GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER). GLenum target; @@ -198,7 +198,7 @@ namespace opengl /** * @copydoc VertexBuffer(int, GLenum, GLenum) */ - VertexArray(int size, GLenum target, GLenum usage); + VertexArray(size_t size, GLenum target, GLenum usage); /** * Frees the data we've allocated. @@ -210,8 +210,8 @@ namespace opengl virtual void unmap(); virtual void bind(); virtual void unbind(); - virtual void fill(int offset, int size, const void *data); - virtual const void *getPointer(int offset) const ; + virtual void fill(size_t offset, size_t size, const void *data); + virtual const void *getPointer(size_t offset) const ; private: // Holds the data. @@ -230,9 +230,9 @@ namespace opengl public: /** - * @copydoc VertexBuffer(int, GLenum, GLenum) + * @copydoc VertexBuffer(size_t, GLenum, GLenum) */ - VBO(int size, GLenum target, GLenum usage); + VBO(size_t size, GLenum target, GLenum usage); /** * Deletes the VBOs from OpenGL. @@ -244,8 +244,8 @@ namespace opengl virtual void unmap(); virtual void bind(); virtual void unbind(); - virtual void fill(int offset, int size, const void *data); - virtual const void *getPointer(int offset) const ; + virtual void fill(size_t offset, size_t size, const void *data); + virtual const void *getPointer(size_t offset) const ; // Implements Volatile. bool loadVolatile();