RenderSystem.java
com.mojang.blaze3d.systems.RenderSystem
信息
- 全限定名:com.mojang.blaze3d.systems.RenderSystem
- 类型:public class
- 包:com.mojang.blaze3d.systems
- 源码路径:src/main/java/com/mojang/blaze3d/systems/RenderSystem.java
- 起始行号:L37
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
MINIMUM_ATLAS_TEXTURE_SIZE- 类型:
int - 修饰符:
public static final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
PROJECTION_MATRIX_UBO_SIZE- 类型:
int - 修饰符:
public static final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
renderThread- 类型:
Thread - 修饰符:
private static - 源码定位:
L41 - 说明:
TODO
- 类型:
-
DEVICE- 类型:
GpuDevice - 修饰符:
private static - 源码定位:
L42 - 说明:
TODO
- 类型:
-
sharedSequential- 类型:
RenderSystem.AutoStorageIndexBuffer - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
sharedSequentialQuad- 类型:
RenderSystem.AutoStorageIndexBuffer - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
sharedSequentialLines- 类型:
RenderSystem.AutoStorageIndexBuffer - 修饰符:
private static final - 源码定位:
L52 - 说明:
TODO
- 类型:
-
projectionType- 类型:
ProjectionType - 修饰符:
private static - 源码定位:
L60 - 说明:
TODO
- 类型:
-
savedProjectionType- 类型:
ProjectionType - 修饰符:
private static - 源码定位:
L61 - 说明:
TODO
- 类型:
-
modelViewStack- 类型:
Matrix4fStack - 修饰符:
private static final - 源码定位:
L62 - 说明:
TODO
- 类型:
-
shaderFog- 类型:
GpuBufferSlice - 修饰符:
private static - 源码定位:
L63 - 说明:
TODO
- 类型:
-
shaderLightDirections- 类型:
GpuBufferSlice - 修饰符:
private static - 源码定位:
L64 - 说明:
TODO
- 类型:
-
projectionMatrixBuffer- 类型:
GpuBufferSlice - 修饰符:
private static - 源码定位:
L65 - 说明:
TODO
- 类型:
-
savedProjectionMatrixBuffer- 类型:
GpuBufferSlice - 修饰符:
private static - 源码定位:
L66 - 说明:
TODO
- 类型:
-
apiDescription- 类型:
String - 修饰符:
private static - 源码定位:
L67 - 说明:
TODO
- 类型:
-
pollEventsWaitStart- 类型:
AtomicLong - 修饰符:
private static final - 源码定位:
L68 - 说明:
TODO
- 类型:
-
pollingEvents- 类型:
AtomicBoolean - 修饰符:
private static final - 源码定位:
L69 - 说明:
TODO
- 类型:
-
PENDING_FENCES- 类型:
ArrayListDeque<RenderSystem.GpuAsyncTask> - 修饰符:
private static final - 源码定位:
L70 - 说明:
TODO
- 类型:
-
outputColorTextureOverride- 类型:
GpuTextureView - 修饰符:
public static - 源码定位:
L71 - 说明:
TODO
- 类型:
-
outputDepthTextureOverride- 类型:
GpuTextureView - 修饰符:
public static - 源码定位:
L72 - 说明:
TODO
- 类型:
-
globalSettingsUniform- 类型:
GpuBuffer - 修饰符:
private static - 源码定位:
L73 - 说明:
TODO
- 类型:
-
dynamicUniforms- 类型:
DynamicUniforms - 修饰符:
private static - 源码定位:
L74 - 说明:
TODO
- 类型:
-
scissorStateForRenderTypeDraws- 类型:
ScissorState - 修饰符:
private static final - 源码定位:
L75 - 说明:
TODO
- 类型:
-
samplerCache- 类型:
SamplerCache - 修饰符:
private static final - 源码定位:
L76 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
com.mojang.blaze3d.systems.RenderSystem.AutoStorageIndexBuffer- 类型:
class - 修饰符:
public static final - 源码定位:
L304 - 说明:
TODO
- 类型:
-
com.mojang.blaze3d.systems.RenderSystem.AutoStorageIndexBuffer.IndexGenerator- 类型:
interface - 修饰符:
private - 源码定位:
L374 - 说明:
TODO
- 类型:
-
com.mojang.blaze3d.systems.RenderSystem.GpuAsyncTask- 类型:
record - 修饰符:
package-private - 源码定位:
L380 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static SamplerCache getSamplerCache() @ L78
- 方法名:getSamplerCache
- 源码定位:L78
- 返回类型:SamplerCache
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void initRenderThread() @ L82
- 方法名:initRenderThread
- 源码定位:L82
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static boolean isOnRenderThread() @ L90
- 方法名:isOnRenderThread
- 源码定位:L90
- 返回类型:boolean
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void assertOnRenderThread() @ L94
- 方法名:assertOnRenderThread
- 源码定位:L94
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
private static IllegalStateException constructThreadException() @ L100
- 方法名:constructThreadException
- 源码定位:L100
- 返回类型:IllegalStateException
- 修饰符:private static
参数:
- 无
说明:
TODO
public static void pollEvents() @ L104
- 方法名:pollEvents
- 源码定位:L104
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static boolean isFrozenAtPollEvents() @ L111
- 方法名:isFrozenAtPollEvents
- 源码定位:L111
- 返回类型:boolean
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void flipFrame(TracyFrameCapture tracyFrameCapture) @ L115
- 方法名:flipFrame
- 源码定位:L115
- 返回类型:void
- 修饰符:public static
参数:
- tracyFrameCapture: TracyFrameCapture
说明:
TODO
public static void setShaderFog(GpuBufferSlice fog) @ L126
- 方法名:setShaderFog
- 源码定位:L126
- 返回类型:void
- 修饰符:public static
参数:
- fog: GpuBufferSlice
说明:
TODO
public static GpuBufferSlice getShaderFog() @ L130
- 方法名:getShaderFog
- 源码定位:L130
- 返回类型:GpuBufferSlice
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void setShaderLights(GpuBufferSlice buffer) @ L134
- 方法名:setShaderLights
- 源码定位:L134
- 返回类型:void
- 修饰符:public static
参数:
- buffer: GpuBufferSlice
说明:
TODO
public static GpuBufferSlice getShaderLights() @ L138
- 方法名:getShaderLights
- 源码定位:L138
- 返回类型:GpuBufferSlice
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void enableScissorForRenderTypeDraws(int x, int y, int width, int height) @ L142
- 方法名:enableScissorForRenderTypeDraws
- 源码定位:L142
- 返回类型:void
- 修饰符:public static
参数:
- x: int
- y: int
- width: int
- height: int
说明:
TODO
public static void disableScissorForRenderTypeDraws() @ L146
- 方法名:disableScissorForRenderTypeDraws
- 源码定位:L146
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static ScissorState getScissorStateForRenderTypeDraws() @ L150
- 方法名:getScissorStateForRenderTypeDraws
- 源码定位:L150
- 返回类型:ScissorState
- 修饰符:public static
参数:
- 无
说明:
TODO
public static String getBackendDescription() @ L154
- 方法名:getBackendDescription
- 源码定位:L154
- 返回类型:String
- 修饰符:public static
参数:
- 无
说明:
TODO
public static String getApiDescription() @ L158
- 方法名:getApiDescription
- 源码定位:L158
- 返回类型:String
- 修饰符:public static
参数:
- 无
说明:
TODO
public static TimeSource.NanoTimeSource initBackendSystem(BackendOptions options) @ L162
- 方法名:initBackendSystem
- 源码定位:L162
- 返回类型:TimeSource.NanoTimeSource
- 修饰符:public static
参数:
- options: BackendOptions
说明:
TODO
public static void initRenderer(GpuDevice device) @ L166
- 方法名:initRenderer
- 源码定位:L166
- 返回类型:void
- 修饰符:public static
参数:
- device: GpuDevice
说明:
TODO
public static void setErrorCallback(GLFWErrorCallbackI onFullscreenError) @ L177
- 方法名:setErrorCallback
- 源码定位:L177
- 返回类型:void
- 修饰符:public static
参数:
- onFullscreenError: GLFWErrorCallbackI
说明:
TODO
public static void setupDefaultState() @ L181
- 方法名:setupDefaultState
- 源码定位:L181
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void setProjectionMatrix(GpuBufferSlice projectionMatrixBuffer, ProjectionType type) @ L185
- 方法名:setProjectionMatrix
- 源码定位:L185
- 返回类型:void
- 修饰符:public static
参数:
- projectionMatrixBuffer: GpuBufferSlice
- type: ProjectionType
说明:
TODO
public static void backupProjectionMatrix() @ L191
- 方法名:backupProjectionMatrix
- 源码定位:L191
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void restoreProjectionMatrix() @ L197
- 方法名:restoreProjectionMatrix
- 源码定位:L197
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static GpuBufferSlice getProjectionMatrixBuffer() @ L203
- 方法名:getProjectionMatrixBuffer
- 源码定位:L203
- 返回类型:GpuBufferSlice
- 修饰符:public static
参数:
- 无
说明:
TODO
public static Matrix4f getModelViewMatrix() @ L208
- 方法名:getModelViewMatrix
- 源码定位:L208
- 返回类型:Matrix4f
- 修饰符:public static
参数:
- 无
说明:
TODO
public static Matrix4fStack getModelViewStack() @ L213
- 方法名:getModelViewStack
- 源码定位:L213
- 返回类型:Matrix4fStack
- 修饰符:public static
参数:
- 无
说明:
TODO
public static RenderSystem.AutoStorageIndexBuffer getSequentialBuffer(VertexFormat.Mode primitiveMode) @ L218
- 方法名:getSequentialBuffer
- 源码定位:L218
- 返回类型:RenderSystem.AutoStorageIndexBuffer
- 修饰符:public static
参数:
- primitiveMode: VertexFormat.Mode
说明:
TODO
public static void setGlobalSettingsUniform(GpuBuffer buffer) @ L228
- 方法名:setGlobalSettingsUniform
- 源码定位:L228
- 返回类型:void
- 修饰符:public static
参数:
- buffer: GpuBuffer
说明:
TODO
public static GpuBuffer getGlobalSettingsUniform() @ L232
- 方法名:getGlobalSettingsUniform
- 源码定位:L232
- 返回类型:GpuBuffer
- 修饰符:public static
参数:
- 无
说明:
TODO
public static ProjectionType getProjectionType() @ L236
- 方法名:getProjectionType
- 源码定位:L236
- 返回类型:ProjectionType
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void queueFencedTask(Runnable task) @ L241
- 方法名:queueFencedTask
- 源码定位:L241
- 返回类型:void
- 修饰符:public static
参数:
- task: Runnable
说明:
TODO
public static void executePendingTasks() @ L245
- 方法名:executePendingTasks
- 源码定位:L245
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static GpuDevice getDevice() @ L261
- 方法名:getDevice
- 源码定位:L261
- 返回类型:GpuDevice
- 修饰符:public static
参数:
- 无
说明:
TODO
public static GpuDevice tryGetDevice() @ L269
- 方法名:tryGetDevice
- 源码定位:L269
- 返回类型:GpuDevice
- 修饰符:public static
参数:
- 无
说明:
TODO
public static DynamicUniforms getDynamicUniforms() @ L273
- 方法名:getDynamicUniforms
- 源码定位:L273
- 返回类型:DynamicUniforms
- 修饰符:public static
参数:
- 无
说明:
TODO
public static void bindDefaultUniforms(RenderPass renderPass) @ L281
- 方法名:bindDefaultUniforms
- 源码定位:L281
- 返回类型:void
- 修饰符:public static
参数:
- renderPass: RenderPass
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RenderSystem {
private static final Logger LOGGER = LogUtils.getLogger();
public static final int MINIMUM_ATLAS_TEXTURE_SIZE = 1024;
public static final int PROJECTION_MATRIX_UBO_SIZE = new Std140SizeCalculator().putMat4f().get();
private static @Nullable Thread renderThread;
private static @Nullable GpuDevice DEVICE;
private static final RenderSystem.AutoStorageIndexBuffer sharedSequential = new RenderSystem.AutoStorageIndexBuffer(1, 1, IntConsumer::accept);
private static final RenderSystem.AutoStorageIndexBuffer sharedSequentialQuad = new RenderSystem.AutoStorageIndexBuffer(4, 6, (c, i) -> {
c.accept(i);
c.accept(i + 1);
c.accept(i + 2);
c.accept(i + 2);
c.accept(i + 3);
c.accept(i);
});
private static final RenderSystem.AutoStorageIndexBuffer sharedSequentialLines = new RenderSystem.AutoStorageIndexBuffer(4, 6, (c, i) -> {
c.accept(i);
c.accept(i + 1);
c.accept(i + 2);
c.accept(i + 3);
c.accept(i + 2);
c.accept(i + 1);
});
private static ProjectionType projectionType = ProjectionType.PERSPECTIVE;
private static ProjectionType savedProjectionType = ProjectionType.PERSPECTIVE;
private static final Matrix4fStack modelViewStack = new Matrix4fStack(16);
private static @Nullable GpuBufferSlice shaderFog = null;
private static @Nullable GpuBufferSlice shaderLightDirections;
private static @Nullable GpuBufferSlice projectionMatrixBuffer;
private static @Nullable GpuBufferSlice savedProjectionMatrixBuffer;
private static String apiDescription = "Unknown";
private static final AtomicLong pollEventsWaitStart = new AtomicLong();
private static final AtomicBoolean pollingEvents = new AtomicBoolean(false);
private static final ArrayListDeque<RenderSystem.GpuAsyncTask> PENDING_FENCES = new ArrayListDeque<>();
public static @Nullable GpuTextureView outputColorTextureOverride;
public static @Nullable GpuTextureView outputDepthTextureOverride;
private static @Nullable GpuBuffer globalSettingsUniform;
private static @Nullable DynamicUniforms dynamicUniforms;
private static final ScissorState scissorStateForRenderTypeDraws = new ScissorState();
private static final SamplerCache samplerCache = new SamplerCache();
public static SamplerCache getSamplerCache() {
return samplerCache;
}
public static void initRenderThread() {
if (renderThread != null) {
throw new IllegalStateException("Could not initialize render thread");
} else {
renderThread = Thread.currentThread();
}
}
public static boolean isOnRenderThread() {
return Thread.currentThread() == renderThread;
}
public static void assertOnRenderThread() {
if (!isOnRenderThread()) {
throw constructThreadException();
}
}
private static IllegalStateException constructThreadException() {
return new IllegalStateException("Rendersystem called from wrong thread");
}
public static void pollEvents() {
pollEventsWaitStart.set(Util.getMillis());
pollingEvents.set(true);
GLFW.glfwPollEvents();
pollingEvents.set(false);
}
public static boolean isFrozenAtPollEvents() {
return pollingEvents.get() && Util.getMillis() - pollEventsWaitStart.get() > 200L;
}
public static void flipFrame(@Nullable TracyFrameCapture tracyFrameCapture) {
Tesselator.getInstance().clear();
getDevice().presentFrame();
if (tracyFrameCapture != null) {
tracyFrameCapture.endFrame();
}
dynamicUniforms.reset();
Minecraft.getInstance().levelRenderer.endFrame();
}
public static void setShaderFog(GpuBufferSlice fog) {
shaderFog = fog;
}
public static @Nullable GpuBufferSlice getShaderFog() {
return shaderFog;
}
public static void setShaderLights(GpuBufferSlice buffer) {
shaderLightDirections = buffer;
}
public static @Nullable GpuBufferSlice getShaderLights() {
return shaderLightDirections;
}
public static void enableScissorForRenderTypeDraws(int x, int y, int width, int height) {
scissorStateForRenderTypeDraws.enable(x, y, width, height);
}
public static void disableScissorForRenderTypeDraws() {
scissorStateForRenderTypeDraws.disable();
}
public static ScissorState getScissorStateForRenderTypeDraws() {
return scissorStateForRenderTypeDraws;
}
public static String getBackendDescription() {
return String.format(Locale.ROOT, "LWJGL version %s", GLX._getLWJGLVersion());
}
public static String getApiDescription() {
return apiDescription;
}
public static TimeSource.NanoTimeSource initBackendSystem(BackendOptions options) {
return GLX._initGlfw(options)::getAsLong;
}
public static void initRenderer(GpuDevice device) {
if (DEVICE != null) {
throw new IllegalStateException("RenderSystem.DEVICE already initialized");
} else {
DEVICE = device;
apiDescription = getDevice().getImplementationInformation();
dynamicUniforms = new DynamicUniforms();
samplerCache.initialize();
}
}
public static void setErrorCallback(GLFWErrorCallbackI onFullscreenError) {
GLX._setGlfwErrorCallback(onFullscreenError);
}
public static void setupDefaultState() {
modelViewStack.clear();
}
public static void setProjectionMatrix(GpuBufferSlice projectionMatrixBuffer, ProjectionType type) {
assertOnRenderThread();
RenderSystem.projectionMatrixBuffer = projectionMatrixBuffer;
projectionType = type;
}
public static void backupProjectionMatrix() {
assertOnRenderThread();
savedProjectionMatrixBuffer = projectionMatrixBuffer;
savedProjectionType = projectionType;
}
public static void restoreProjectionMatrix() {
assertOnRenderThread();
projectionMatrixBuffer = savedProjectionMatrixBuffer;
projectionType = savedProjectionType;
}
public static @Nullable GpuBufferSlice getProjectionMatrixBuffer() {
assertOnRenderThread();
return projectionMatrixBuffer;
}
public static Matrix4f getModelViewMatrix() {
assertOnRenderThread();
return modelViewStack;
}
public static Matrix4fStack getModelViewStack() {
assertOnRenderThread();
return modelViewStack;
}
public static RenderSystem.AutoStorageIndexBuffer getSequentialBuffer(VertexFormat.Mode primitiveMode) {
assertOnRenderThread();
return switch (primitiveMode) {
case QUADS -> sharedSequentialQuad;
case LINES -> sharedSequentialLines;
default -> sharedSequential;
};
}
public static void setGlobalSettingsUniform(GpuBuffer buffer) {
globalSettingsUniform = buffer;
}
public static @Nullable GpuBuffer getGlobalSettingsUniform() {
return globalSettingsUniform;
}
public static ProjectionType getProjectionType() {
assertOnRenderThread();
return projectionType;
}
public static void queueFencedTask(Runnable task) {
PENDING_FENCES.addLast(new RenderSystem.GpuAsyncTask(task, getDevice().createCommandEncoder().createFence()));
}
public static void executePendingTasks() {
for (RenderSystem.GpuAsyncTask task = PENDING_FENCES.peekFirst(); task != null; task = PENDING_FENCES.peekFirst()) {
if (!task.fence.awaitCompletion(0L)) {
return;
}
try {
task.callback.run();
} finally {
task.fence.close();
}
PENDING_FENCES.removeFirst();
}
}
public static GpuDevice getDevice() {
if (DEVICE == null) {
throw new IllegalStateException("Can't getDevice() before it was initialized");
} else {
return DEVICE;
}
}
public static @Nullable GpuDevice tryGetDevice() {
return DEVICE;
}
public static DynamicUniforms getDynamicUniforms() {
if (dynamicUniforms == null) {
throw new IllegalStateException("Can't getDynamicUniforms() before device was initialized");
} else {
return dynamicUniforms;
}
}
public static void bindDefaultUniforms(RenderPass renderPass) {
GpuBufferSlice projectionMatrix = getProjectionMatrixBuffer();
if (projectionMatrix != null) {
renderPass.setUniform("Projection", projectionMatrix);
}
GpuBufferSlice fog = getShaderFog();
if (fog != null) {
renderPass.setUniform("Fog", fog);
}
GpuBuffer globalUniform = getGlobalSettingsUniform();
if (globalUniform != null) {
renderPass.setUniform("Globals", globalUniform);
}
GpuBufferSlice shaderLights = getShaderLights();
if (shaderLights != null) {
renderPass.setUniform("Lighting", shaderLights);
}
}
@OnlyIn(Dist.CLIENT)
public static final class AutoStorageIndexBuffer {
private final int vertexStride;
private final int indexStride;
private final RenderSystem.AutoStorageIndexBuffer.IndexGenerator generator;
private @Nullable GpuBuffer buffer;
private VertexFormat.IndexType type = VertexFormat.IndexType.SHORT;
private int indexCount;
private AutoStorageIndexBuffer(int vertexStride, int indexStride, RenderSystem.AutoStorageIndexBuffer.IndexGenerator generator) {
this.vertexStride = vertexStride;
this.indexStride = indexStride;
this.generator = generator;
}
public boolean hasStorage(int indexCount) {
return indexCount <= this.indexCount;
}
public GpuBuffer getBuffer(int indexCount) {
this.ensureStorage(indexCount);
return this.buffer;
}
private void ensureStorage(int indexCount) {
if (!this.hasStorage(indexCount)) {
indexCount = Mth.roundToward(indexCount * 2, this.indexStride);
RenderSystem.LOGGER.debug("Growing IndexBuffer: Old limit {}, new limit {}.", this.indexCount, indexCount);
int primitiveCount = indexCount / this.indexStride;
int vertexCount = primitiveCount * this.vertexStride;
VertexFormat.IndexType type = VertexFormat.IndexType.least(vertexCount);
int bufferSize = Mth.roundToward(indexCount * type.bytes, 4);
ByteBuffer data = MemoryUtil.memAlloc(bufferSize);
try {
this.type = type;
it.unimi.dsi.fastutil.ints.IntConsumer intConsumer = this.intConsumer(data);
for (int ii = 0; ii < indexCount; ii += this.indexStride) {
this.generator.accept(intConsumer, ii * this.vertexStride / this.indexStride);
}
data.flip();
if (this.buffer != null) {
this.buffer.close();
}
this.buffer = RenderSystem.getDevice().createBuffer(() -> "Auto Storage index buffer", 64, data);
} finally {
MemoryUtil.memFree(data);
}
this.indexCount = indexCount;
}
}
private it.unimi.dsi.fastutil.ints.IntConsumer intConsumer(ByteBuffer buffer) {
switch (this.type) {
case SHORT:
return value -> buffer.putShort((short)value);
case INT:
default:
return buffer::putInt;
}
}
public VertexFormat.IndexType type() {
return this.type;
}
@OnlyIn(Dist.CLIENT)
private interface IndexGenerator {
void accept(final it.unimi.dsi.fastutil.ints.IntConsumer consumer, final int start);
}
}
@OnlyIn(Dist.CLIENT)
record GpuAsyncTask(Runnable callback, GpuFence fence) {
}
}引用的其他类
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
Std140SizeCalculator()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GLX._getLWJGLVersion(), GLX._initGlfw(), GLX._setGlfwErrorCallback()
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
SamplerCache()
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
ScissorState()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Tesselator.getInstance()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
VertexFormat.IndexType.least()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
DynamicUniforms()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.roundToward()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getMillis()
- 引用位置: