DirectStateAccess.java
com.mojang.blaze3d.opengl.DirectStateAccess
信息
- 全限定名:com.mojang.blaze3d.opengl.DirectStateAccess
- 类型:public abstract class
- 包:com.mojang.blaze3d.opengl
- 源码路径:src/main/java/com/mojang/blaze3d/opengl/DirectStateAccess.java
- 起始行号:L17
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
com.mojang.blaze3d.opengl.DirectStateAccess.Core- 类型:
class - 修饰符:
private static - 源码定位:
L56 - 说明:
TODO
- 类型:
-
com.mojang.blaze3d.opengl.DirectStateAccess.Emulated- 类型:
class - 修饰符:
private static - 源码定位:
L131 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static DirectStateAccess create(GLCapabilities capabilities, Set<String> enabledExtensions, GraphicsWorkarounds workarounds) @ L18
- 方法名:create
- 源码定位:L18
- 返回类型:DirectStateAccess
- 修饰符:public static
参数:
- capabilities: GLCapabilities
- enabledExtensions: Set
- workarounds: GraphicsWorkarounds
说明:
TODO
abstract int createBuffer() @ L27
- 方法名:createBuffer
- 源码定位:L27
- 返回类型:int
- 修饰符:abstract
参数:
- 无
说明:
TODO
abstract void bufferData(int buffer, long size, int usage) @ L29
- 方法名:bufferData
- 源码定位:L29
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- size: long
- usage: int
说明:
TODO
abstract void bufferData(int buffer, ByteBuffer data, int usage) @ L31
- 方法名:bufferData
- 源码定位:L31
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- data: ByteBuffer
- usage: int
说明:
TODO
abstract void bufferSubData(int buffer, long offset, ByteBuffer data, int usage) @ L33
- 方法名:bufferSubData
- 源码定位:L33
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- offset: long
- data: ByteBuffer
- usage: int
说明:
TODO
abstract void bufferStorage(int buffer, long size, int usage) @ L35
- 方法名:bufferStorage
- 源码定位:L35
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- size: long
- usage: int
说明:
TODO
abstract void bufferStorage(int buffer, ByteBuffer data, int usage) @ L37
- 方法名:bufferStorage
- 源码定位:L37
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- data: ByteBuffer
- usage: int
说明:
TODO
abstract ByteBuffer mapBufferRange(int buffer, long offset, long length, int access, int usage) @ L39
- 方法名:mapBufferRange
- 源码定位:L39
- 返回类型:ByteBuffer
- 修饰符:abstract
参数:
- buffer: int
- offset: long
- length: long
- access: int
- usage: int
说明:
TODO
abstract void unmapBuffer(int buffer, int usage) @ L41
- 方法名:unmapBuffer
- 源码定位:L41
- 返回类型:void
- 修饰符:abstract
参数:
- buffer: int
- usage: int
说明:
TODO
abstract int createFrameBufferObject() @ L43
- 方法名:createFrameBufferObject
- 源码定位:L43
- 返回类型:int
- 修饰符:abstract
参数:
- 无
说明:
TODO
abstract void bindFrameBufferTextures(int fbo, int color0, int depth, int mipLevel, int bindSlot) @ L45
- 方法名:bindFrameBufferTextures
- 源码定位:L45
- 返回类型:void
- 修饰符:abstract
参数:
- fbo: int
- color0: int
- depth: int
- mipLevel: int
- bindSlot: int
说明:
TODO
abstract void blitFrameBuffers(int source, int dest, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) @ L47
- 方法名:blitFrameBuffers
- 源码定位:L47
- 返回类型:void
- 修饰符:abstract
参数:
- source: int
- dest: int
- srcX0: int
- srcY0: int
- srcX1: int
- srcY1: int
- dstX0: int
- dstY0: int
- dstX1: int
- dstY1: int
- mask: int
- filter: int
说明:
TODO
abstract void flushMappedBufferRange(int handle, long offset, long length, int usage) @ L51
- 方法名:flushMappedBufferRange
- 源码定位:L51
- 返回类型:void
- 修饰符:abstract
参数:
- handle: int
- offset: long
- length: long
- usage: int
说明:
TODO
abstract void copyBufferSubData(int source, int target, long sourceOffset, long targetOffset, long length) @ L53
- 方法名:copyBufferSubData
- 源码定位:L53
- 返回类型:void
- 修饰符:abstract
参数:
- source: int
- target: int
- sourceOffset: long
- targetOffset: long
- length: long
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public abstract class DirectStateAccess {
public static DirectStateAccess create(GLCapabilities capabilities, Set<String> enabledExtensions, GraphicsWorkarounds workarounds) {
if (capabilities.GL_ARB_direct_state_access && GlDevice.USE_GL_ARB_direct_state_access && !workarounds.isGlOnDx12()) {
enabledExtensions.add("GL_ARB_direct_state_access");
return new DirectStateAccess.Core();
} else {
return new DirectStateAccess.Emulated();
}
}
abstract int createBuffer();
abstract void bufferData(int buffer, long size, @GpuBuffer.Usage int usage);
abstract void bufferData(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage);
abstract void bufferSubData(int buffer, long offset, ByteBuffer data, @GpuBuffer.Usage int usage);
abstract void bufferStorage(int buffer, long size, @GpuBuffer.Usage int usage);
abstract void bufferStorage(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage);
abstract @Nullable ByteBuffer mapBufferRange(int buffer, long offset, long length, int access, @GpuBuffer.Usage int usage);
abstract void unmapBuffer(int buffer, @GpuBuffer.Usage int usage);
abstract int createFrameBufferObject();
abstract void bindFrameBufferTextures(int fbo, int color0, int depth, int mipLevel, int bindSlot);
abstract void blitFrameBuffers(
int source, int dest, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter
);
abstract void flushMappedBufferRange(final int handle, final long offset, final long length, @GpuBuffer.Usage final int usage);
abstract void copyBufferSubData(int source, int target, long sourceOffset, long targetOffset, long length);
@OnlyIn(Dist.CLIENT)
private static class Core extends DirectStateAccess {
@Override
int createBuffer() {
GlStateManager.incrementTrackedBuffers();
return ARBDirectStateAccess.glCreateBuffers();
}
@Override
void bufferData(int buffer, long size, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glNamedBufferData(buffer, size, GlConst.bufferUsageToGlEnum(usage));
}
@Override
void bufferData(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glNamedBufferData(buffer, data, GlConst.bufferUsageToGlEnum(usage));
}
@Override
void bufferSubData(int buffer, long offset, ByteBuffer data, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glNamedBufferSubData(buffer, offset, data);
}
@Override
void bufferStorage(int buffer, long size, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glNamedBufferStorage(buffer, size, GlConst.bufferUsageToGlFlag(usage));
}
@Override
void bufferStorage(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glNamedBufferStorage(buffer, data, GlConst.bufferUsageToGlFlag(usage));
}
@Override
@Nullable ByteBuffer mapBufferRange(int buffer, long offset, long length, int flags, @GpuBuffer.Usage int usage) {
return ARBDirectStateAccess.glMapNamedBufferRange(buffer, offset, length, flags);
}
@Override
void unmapBuffer(int buffer, int usage) {
ARBDirectStateAccess.glUnmapNamedBuffer(buffer);
}
@Override
public int createFrameBufferObject() {
return ARBDirectStateAccess.glCreateFramebuffers();
}
@Override
public void bindFrameBufferTextures(int fbo, int color0, int depth, int mipLevel, @GpuBuffer.Usage int bindSlot) {
ARBDirectStateAccess.glNamedFramebufferTexture(fbo, 36064, color0, mipLevel);
ARBDirectStateAccess.glNamedFramebufferTexture(fbo, 36096, depth, mipLevel);
if (bindSlot != 0) {
GlStateManager._glBindFramebuffer(bindSlot, fbo);
}
}
@Override
public void blitFrameBuffers(
int source, int dest, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter
) {
ARBDirectStateAccess.glBlitNamedFramebuffer(source, dest, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
@Override
void flushMappedBufferRange(int handle, long offset, long length, @GpuBuffer.Usage int usage) {
ARBDirectStateAccess.glFlushMappedNamedBufferRange(handle, offset, length);
}
@Override
void copyBufferSubData(int source, int target, long sourceOffset, long targetOffset, long length) {
ARBDirectStateAccess.glCopyNamedBufferSubData(source, target, sourceOffset, targetOffset, length);
}
}
@OnlyIn(Dist.CLIENT)
private static class Emulated extends DirectStateAccess {
private int selectBufferBindTarget(@GpuBuffer.Usage int usage) {
if ((usage & 32) != 0) {
return 34962;
} else if ((usage & 64) != 0) {
return 34963;
} else {
return (usage & 128) != 0 ? 35345 : 36663;
}
}
@Override
int createBuffer() {
return GlStateManager._glGenBuffers();
}
@Override
void bufferData(int buffer, long size, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
GlStateManager._glBufferData(target, size, GlConst.bufferUsageToGlEnum(usage));
GlStateManager._glBindBuffer(target, 0);
}
@Override
void bufferData(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
GlStateManager._glBufferData(target, data, GlConst.bufferUsageToGlEnum(usage));
GlStateManager._glBindBuffer(target, 0);
}
@Override
void bufferSubData(int buffer, long offset, ByteBuffer data, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
GlStateManager._glBufferSubData(target, offset, data);
GlStateManager._glBindBuffer(target, 0);
}
@Override
void bufferStorage(int buffer, long size, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
ARBBufferStorage.glBufferStorage(target, size, GlConst.bufferUsageToGlFlag(usage));
GlStateManager._glBindBuffer(target, 0);
}
@Override
void bufferStorage(int buffer, ByteBuffer data, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
ARBBufferStorage.glBufferStorage(target, data, GlConst.bufferUsageToGlFlag(usage));
GlStateManager._glBindBuffer(target, 0);
}
@Override
@Nullable ByteBuffer mapBufferRange(int buffer, long offset, long length, int access, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
ByteBuffer byteBuffer = GlStateManager._glMapBufferRange(target, offset, length, access);
GlStateManager._glBindBuffer(target, 0);
return byteBuffer;
}
@Override
void unmapBuffer(int buffer, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
GlStateManager._glUnmapBuffer(target);
GlStateManager._glBindBuffer(target, 0);
}
@Override
void flushMappedBufferRange(int buffer, long offset, long length, @GpuBuffer.Usage int usage) {
int target = this.selectBufferBindTarget(usage);
GlStateManager._glBindBuffer(target, buffer);
GL30.glFlushMappedBufferRange(target, offset, length);
GlStateManager._glBindBuffer(target, 0);
}
@Override
void copyBufferSubData(int source, int target, long sourceOffset, long targetOffset, long length) {
GlStateManager._glBindBuffer(36662, source);
GlStateManager._glBindBuffer(36663, target);
GL31.glCopyBufferSubData(36662, 36663, sourceOffset, targetOffset, length);
GlStateManager._glBindBuffer(36662, 0);
GlStateManager._glBindBuffer(36663, 0);
}
@Override
public int createFrameBufferObject() {
return GlStateManager.glGenFramebuffers();
}
@Override
public void bindFrameBufferTextures(int fbo, int color0, int depth, int mipLevel, int bindSlot) {
int tempBindSlot = bindSlot == 0 ? '\u8ca9' : bindSlot;
int oldFbo = GlStateManager.getFrameBuffer(tempBindSlot);
GlStateManager._glBindFramebuffer(tempBindSlot, fbo);
GlStateManager._glFramebufferTexture2D(tempBindSlot, 36064, 3553, color0, mipLevel);
GlStateManager._glFramebufferTexture2D(tempBindSlot, 36096, 3553, depth, mipLevel);
if (bindSlot == 0) {
GlStateManager._glBindFramebuffer(tempBindSlot, oldFbo);
}
}
@Override
public void blitFrameBuffers(
int source, int dest, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter
) {
int oldRead = GlStateManager.getFrameBuffer(36008);
int oldDraw = GlStateManager.getFrameBuffer(36009);
GlStateManager._glBindFramebuffer(36008, source);
GlStateManager._glBindFramebuffer(36009, dest);
GlStateManager._glBlitFrameBuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
GlStateManager._glBindFramebuffer(36008, oldRead);
GlStateManager._glBindFramebuffer(36009, oldDraw);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GlConst.bufferUsageToGlEnum(), GlConst.bufferUsageToGlFlag()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GlStateManager._glBindBuffer(), GlStateManager._glBindFramebuffer(), GlStateManager._glBlitFrameBuffer(), GlStateManager._glBufferData(), GlStateManager._glBufferSubData(), GlStateManager._glFramebufferTexture2D(), GlStateManager._glGenBuffers(), GlStateManager._glMapBufferRange(), GlStateManager._glUnmapBuffer(), GlStateManager.getFrameBuffer(), GlStateManager.glGenFramebuffers(), GlStateManager.incrementTrackedBuffers()
- 引用位置: