Commits

Alex Szpakowski committed 7192c05

Fixed SpriteBatch:unbind

Comments (0)

Files changed (2)

src/modules/graphics/opengl/VertexBuffer.cpp

 }
 
 VertexBuffer::VertexBuffer(size_t size, GLenum target, GLenum usage)
-	: size(size)
+	: is_bound(false)
+	, size(size)
 	, target(target)
 	, usage(usage)
 {
 
 void VertexArray::bind()
 {
+	is_bound = true;
 }
 
 void VertexArray::unbind()
 {
+	is_bound = false;
 }
 
 void VertexArray::fill(size_t offset, size_t size, const void *data)
 	if (!is_mapped)
 		return;
 
+	// VBO::bind is a no-op when the VBO is mapped, so we have to make sure it's
+	// bound here.
+	if (is_bound)
+		glBindBufferARB(getTarget(), vbo);
+
 	// "orphan" current buffer to avoid implicit synchronisation on the gpu:
 	// http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf
 	glBufferDataARB(getTarget(), getSize(), NULL,       getUsage());
 	glBufferDataARB(getTarget(), getSize(), memory_map, getUsage());
+
 	is_mapped = false;
 }
 
 {
 	if (!is_mapped)
 		glBindBufferARB(getTarget(), vbo);
+
+	is_bound = true;
 }
 
 void VBO::unbind()
 {
 	if (!is_mapped)
 		glBindBufferARB(getTarget(), 0);
+
+	is_bound = false;
 }
 
 void VBO::fill(size_t offset, size_t size, const void *data)

src/modules/graphics/opengl/VertexBuffer.h

 		return usage;
 	}
 
+	bool isBound() const
+	{
+		return is_bound;
+	}
+
 	/**
 	 * Map the VertexBuffer to client memory.
 	 *
 		void *elems;
 	};
 
+protected:
+
+	// Whether the buffer is currently bound.
+	bool is_bound;
+
 private:
 
 	// The size of the buffer, in bytes.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.