Browse Source

Cause a Lua error instead of silently failing if a vertex buffer memory allocation fails.

Alex Szpakowski 9 years ago
parent
commit
8ea1edbc2a
1 changed files with 6 additions and 5 deletions
  1. 6 5
      src/modules/graphics/opengl/GLBuffer.cpp

+ 6 - 5
src/modules/graphics/opengl/GLBuffer.cpp

@@ -58,12 +58,10 @@ GLBuffer::GLBuffer(size_t size, const void *data, GLenum target, GLenum usage, u
 	if (data != nullptr)
 		memcpy(memory_map, data, size);
 
-	bool ok = load(data != nullptr);
-
-	if (!ok)
+	if (!load(data != nullptr))
 	{
 		delete[] memory_map;
-		throw love::Exception("Could not load VBO.");
+		throw love::Exception("Could not load vertex buffer (out of VRAM?)");
 	}
 }
 
@@ -221,13 +219,16 @@ bool GLBuffer::load(bool restore)
 
 	GLBuffer::Bind bind(*this);
 
+	while (glGetError() != GL_NO_ERROR)
+		/* Clear the error buffer. */;
+
 	// Copy the old buffer only if 'restore' was requested.
 	const GLvoid *src = restore ? memory_map : nullptr;
 
 	// Note that if 'src' is '0', no data will be copied.
 	glBufferData(getTarget(), (GLsizeiptr) getSize(), src, getUsage());
 
-	return true;
+	return (glGetError() == GL_NO_ERROR);
 }
 
 void GLBuffer::unload()