35 lines
1.3 KiB
Java
35 lines
1.3 KiB
Java
package com.mojang.blaze3d.resource;
|
|
|
|
import com.mojang.blaze3d.pipeline.RenderTarget;
|
|
import com.mojang.blaze3d.pipeline.TextureTarget;
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public record RenderTargetDescriptor(int width, int height, boolean useDepth, int clearColor) implements ResourceDescriptor<RenderTarget> {
|
|
public RenderTarget allocate() {
|
|
return new TextureTarget(null, this.width, this.height, this.useDepth);
|
|
}
|
|
|
|
public void prepare(RenderTarget renderTarget) {
|
|
if (this.useDepth) {
|
|
RenderSystem.getDevice()
|
|
.createCommandEncoder()
|
|
.clearColorAndDepthTextures(renderTarget.getColorTexture(), this.clearColor, renderTarget.getDepthTexture(), 1.0);
|
|
} else {
|
|
RenderSystem.getDevice().createCommandEncoder().clearColorTexture(renderTarget.getColorTexture(), this.clearColor);
|
|
}
|
|
}
|
|
|
|
public void free(RenderTarget renderTarget) {
|
|
renderTarget.destroyBuffers();
|
|
}
|
|
|
|
@Override
|
|
public boolean canUsePhysicalResource(ResourceDescriptor<?> descriptor) {
|
|
return !(descriptor instanceof RenderTargetDescriptor renderTargetDescriptor)
|
|
? false
|
|
: this.width == renderTargetDescriptor.width && this.height == renderTargetDescriptor.height && this.useDepth == renderTargetDescriptor.useDepth;
|
|
}
|
|
}
|