RenderPass.java

com.mojang.blaze3d.systems.RenderPass

信息

  • 全限定名:com.mojang.blaze3d.systems.RenderPass
  • 类型:public class
  • 包:com.mojang.blaze3d.systems
  • 源码路径:src/main/java/com/mojang/blaze3d/systems/RenderPass.java
  • 起始行号:L19
  • 实现:AutoCloseable
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

  • backend

    • 类型: RenderPassBackend
    • 修饰符: private final
    • 源码定位: L21
    • 说明:

      TODO

  • device

    • 类型: GpuDeviceBackend
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

  • pushedDebugGroups

    • 类型: int
    • 修饰符: private
    • 源码定位: L23
    • 说明:

      TODO

内部类/嵌套类型

  • com.mojang.blaze3d.systems.RenderPass.Draw

    • 类型: record
    • 修饰符: public
    • 源码定位: L129
    • 说明:

      TODO

  • com.mojang.blaze3d.systems.RenderPass.UniformUploader

    • 类型: interface
    • 修饰符: public
    • 源码定位: L145
    • 说明:

      TODO

构造器

public RenderPass(RenderPassBackend backend, GpuDeviceBackend device) @ L25

  • 构造器名:RenderPass
  • 源码定位:L25
  • 修饰符:public

参数:

  • backend: RenderPassBackend
  • device: GpuDeviceBackend

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void pushDebugGroup(Supplier<String> label) @ L30

  • 方法名:pushDebugGroup
  • 源码定位:L30
  • 返回类型:void
  • 修饰符:public

参数:

  • label: Supplier

说明:

TODO

public void popDebugGroup() @ L39

  • 方法名:popDebugGroup
  • 源码定位:L39
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void setPipeline(RenderPipeline pipeline) @ L50

  • 方法名:setPipeline
  • 源码定位:L50
  • 返回类型:void
  • 修饰符:public

参数:

  • pipeline: RenderPipeline

说明:

TODO

public void bindTexture(String name, GpuTextureView textureView, GpuSampler sampler) @ L54

  • 方法名:bindTexture
  • 源码定位:L54
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String
  • textureView: GpuTextureView
  • sampler: GpuSampler

说明:

TODO

public void setUniform(String name, GpuBuffer value) @ L58

  • 方法名:setUniform
  • 源码定位:L58
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String
  • value: GpuBuffer

说明:

TODO

public void setUniform(String name, GpuBufferSlice value) @ L62

  • 方法名:setUniform
  • 源码定位:L62
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String
  • value: GpuBufferSlice

说明:

TODO

public void enableScissor(int x, int y, int width, int height) @ L71

  • 方法名:enableScissor
  • 源码定位:L71
  • 返回类型:void
  • 修饰符:public

参数:

  • x: int
  • y: int
  • width: int
  • height: int

说明:

TODO

public void disableScissor() @ L75

  • 方法名:disableScissor
  • 源码定位:L75
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void setVertexBuffer(int slot, GpuBuffer vertexBuffer) @ L79

  • 方法名:setVertexBuffer
  • 源码定位:L79
  • 返回类型:void
  • 修饰符:public

参数:

  • slot: int
  • vertexBuffer: GpuBuffer

说明:

TODO

public void setIndexBuffer(GpuBuffer indexBuffer, VertexFormat.IndexType indexType) @ L83

  • 方法名:setIndexBuffer
  • 源码定位:L83
  • 返回类型:void
  • 修饰符:public

参数:

  • indexBuffer: GpuBuffer
  • indexType: VertexFormat.IndexType

说明:

TODO

public void drawIndexed(int baseVertex, int firstIndex, int indexCount, int instanceCount) @ L87

  • 方法名:drawIndexed
  • 源码定位:L87
  • 返回类型:void
  • 修饰符:public

参数:

  • baseVertex: int
  • firstIndex: int
  • indexCount: int
  • instanceCount: int

说明:

TODO

public <T> void drawMultipleIndexed(Collection<RenderPass.Draw<T>> draws, GpuBuffer defaultIndexBuffer, VertexFormat.IndexType defaultIndexType, Collection<String> dynamicUniforms, T uniformArgument) @ L95

  • 方法名:drawMultipleIndexed
  • 源码定位:L95
  • 返回类型: void
  • 修饰符:public

参数:

  • draws: Collection<RenderPass.Draw>
  • defaultIndexBuffer: GpuBuffer
  • defaultIndexType: VertexFormat.IndexType
  • dynamicUniforms: Collection
  • uniformArgument: T

说明:

TODO

public void draw(int firstVertex, int vertexCount) @ L109

  • 方法名:draw
  • 源码定位:L109
  • 返回类型:void
  • 修饰符:public

参数:

  • firstVertex: int
  • vertexCount: int

说明:

TODO

public void close() @ L117

  • 方法名:close
  • 源码定位:L117
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class RenderPass implements AutoCloseable {
    private static final Logger LOGGER = LogUtils.getLogger();
    private final RenderPassBackend backend;
    private final GpuDeviceBackend device;
    private int pushedDebugGroups;
 
    public RenderPass(RenderPassBackend backend, GpuDeviceBackend device) {
        this.backend = backend;
        this.device = device;
    }
 
    public void pushDebugGroup(Supplier<String> label) {
        if (this.backend.isClosed()) {
            throw new IllegalStateException("Can't use a closed render pass");
        } else {
            this.pushedDebugGroups++;
            this.backend.pushDebugGroup(label);
        }
    }
 
    public void popDebugGroup() {
        if (this.backend.isClosed()) {
            throw new IllegalStateException("Can't use a closed render pass");
        } else if (this.pushedDebugGroups == 0) {
            throw new IllegalStateException("Can't pop more debug groups than was pushed!");
        } else {
            this.pushedDebugGroups--;
            this.backend.popDebugGroup();
        }
    }
 
    public void setPipeline(RenderPipeline pipeline) {
        this.backend.setPipeline(pipeline);
    }
 
    public void bindTexture(String name, @Nullable GpuTextureView textureView, @Nullable GpuSampler sampler) {
        this.backend.bindTexture(name, textureView, sampler);
    }
 
    public void setUniform(String name, GpuBuffer value) {
        this.backend.setUniform(name, value);
    }
 
    public void setUniform(String name, GpuBufferSlice value) {
        int alignment = this.device.getUniformOffsetAlignment();
        if (value.offset() % alignment > 0L) {
            throw new IllegalArgumentException("Uniform buffer offset must be aligned to " + alignment);
        } else {
            this.backend.setUniform(name, value);
        }
    }
 
    public void enableScissor(int x, int y, int width, int height) {
        this.backend.enableScissor(x, y, width, height);
    }
 
    public void disableScissor() {
        this.backend.disableScissor();
    }
 
    public void setVertexBuffer(int slot, GpuBuffer vertexBuffer) {
        this.backend.setVertexBuffer(slot, vertexBuffer);
    }
 
    public void setIndexBuffer(GpuBuffer indexBuffer, VertexFormat.IndexType indexType) {
        this.backend.setIndexBuffer(indexBuffer, indexType);
    }
 
    public void drawIndexed(int baseVertex, int firstIndex, int indexCount, int instanceCount) {
        if (this.backend.isClosed()) {
            throw new IllegalStateException("Can't use a closed render pass");
        } else {
            this.backend.drawIndexed(baseVertex, firstIndex, indexCount, instanceCount);
        }
    }
 
    public <T> void drawMultipleIndexed(
        Collection<RenderPass.Draw<T>> draws,
        @Nullable GpuBuffer defaultIndexBuffer,
        VertexFormat.@Nullable IndexType defaultIndexType,
        Collection<String> dynamicUniforms,
        T uniformArgument
    ) {
        if (this.backend.isClosed()) {
            throw new IllegalStateException("Can't use a closed render pass");
        } else {
            this.backend.drawMultipleIndexed(draws, defaultIndexBuffer, defaultIndexType, dynamicUniforms, uniformArgument);
        }
    }
 
    public void draw(int firstVertex, int vertexCount) {
        if (this.backend.isClosed()) {
            throw new IllegalStateException("Can't use a closed render pass");
        } else {
            this.backend.draw(firstVertex, vertexCount);
        }
    }
 
    @Override
    public void close() {
        if (!this.backend.isClosed()) {
            if (this.pushedDebugGroups > 0) {
                throw new IllegalStateException("Render pass had debug groups left open!");
            }
 
            this.backend.close();
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public record Draw<T>(
        int slot,
        GpuBuffer vertexBuffer,
        @Nullable GpuBuffer indexBuffer,
        VertexFormat.@Nullable IndexType indexType,
        int firstIndex,
        int indexCount,
        int baseVertex,
        @Nullable BiConsumer<T, RenderPass.UniformUploader> uniformUploaderConsumer
    ) {
        public Draw(int slot, GpuBuffer vertexBuffer, GpuBuffer indexBuffer, VertexFormat.IndexType indexType, int firstIndex, int indexCount, int baseVertex) {
            this(slot, vertexBuffer, indexBuffer, indexType, firstIndex, indexCount, baseVertex, null);
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public interface UniformUploader {
        void upload(String name, GpuBufferSlice buffer);
    }
}

引用的其他类