Add additional checks in PBO methods

This commit is contained in:
johni0702
2015-07-18 16:33:30 +02:00
parent d7b8339f22
commit c3bc06cab0

View File

@@ -7,6 +7,7 @@ import net.minecraft.client.Minecraft;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.lwjgl.opengl.ARBBufferObject; import org.lwjgl.opengl.ARBBufferObject;
import org.lwjgl.opengl.GLContext; import org.lwjgl.opengl.GLContext;
import org.lwjgl.opengl.Util;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -86,37 +87,61 @@ public class PixelBufferObject {
} }
} }
private void checkNotMapped() {
if (Objects.equals(getHandle(), mapped.get())) {
throw new IllegalStateException("Buffer already mapped.");
}
}
@Api @Api
public ByteBuffer mapReadOnly() { public ByteBuffer mapReadOnly() {
checkBound(); checkBound();
mapped.set(getHandle()); checkNotMapped();
ByteBuffer buffer;
if (arb) { if (arb) {
return ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null); buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null);
} else { } else {
return glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY, size, null); buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY, size, null);
} }
if (buffer == null) {
Util.checkGLError();
}
mapped.set(getHandle());
return buffer;
} }
@Api @Api
public ByteBuffer mapWriteOnly() { public ByteBuffer mapWriteOnly() {
checkBound(); checkBound();
mapped.set(getHandle()); checkNotMapped();
ByteBuffer buffer;
if (arb) { if (arb) {
return ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null); buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null);
} else { } else {
return glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_WRITE_ONLY, size, null); buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_WRITE_ONLY, size, null);
} }
if (buffer == null) {
Util.checkGLError();
}
mapped.set(getHandle());
return buffer;
} }
@Api @Api
public ByteBuffer mapReadWrite() { public ByteBuffer mapReadWrite() {
checkBound(); checkBound();
mapped.set(getHandle()); checkNotMapped();
ByteBuffer buffer;
if (arb) { if (arb) {
return ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null); buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null);
} else { } else {
return glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, size, null); buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, size, null);
} }
if (buffer == null) {
Util.checkGLError();
}
mapped.set(getHandle());
return buffer;
} }
@Api @Api
@@ -130,6 +155,7 @@ public class PixelBufferObject {
} else { } else {
glUnmapBuffer(GL_PIXEL_PACK_BUFFER); glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
} }
mapped.set(0);
} }
@Api @Api