Add additional checks in PBO methods
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user