diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-07-30 21:01:20 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-07-30 21:01:20 +0200 |
| commit | af3d76561468cfbffddd19efcb1a4fe238f2ac15 (patch) | |
| tree | e0f7ebaab01acd0d19badf9e4d41b7f555820d8c /src | |
| parent | 6300ff493fe90fd06162d2f4ce91339c07a50d11 (diff) | |
| download | Firmament-af3d76561468cfbffddd19efcb1a4fe238f2ac15.tar.gz Firmament-af3d76561468cfbffddd19efcb1a4fe238f2ac15.tar.bz2 Firmament-af3d76561468cfbffddd19efcb1a4fe238f2ac15.zip | |
fix: render circle with custom pipeline
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/kotlin/util/mc/CustomRenderPassHelper.kt | 8 | ||||
| -rw-r--r-- | src/main/kotlin/util/render/CustomRenderLayers.kt | 2 | ||||
| -rw-r--r-- | src/main/kotlin/util/render/DumpTexture.kt | 34 | ||||
| -rw-r--r-- | src/main/kotlin/util/render/RenderCircleProgress.kt | 1 |
4 files changed, 44 insertions, 1 deletions
diff --git a/src/main/kotlin/util/mc/CustomRenderPassHelper.kt b/src/main/kotlin/util/mc/CustomRenderPassHelper.kt index 12f98e4..295f727 100644 --- a/src/main/kotlin/util/mc/CustomRenderPassHelper.kt +++ b/src/main/kotlin/util/mc/CustomRenderPassHelper.kt @@ -34,6 +34,7 @@ class CustomRenderPassHelper( private val preparations = mutableListOf<(RenderPass) -> Unit>() val device = RenderSystem.getDevice() private var hasPipelineAction = false + private var hasSetDefaultUniforms = false val commandEncoder = device.createCommandEncoder() fun setPipeline(pipeline: RenderPipeline) { ErrorUtil.softCheck("Already has a pipeline", !hasPipelineAction) @@ -51,7 +52,13 @@ class CustomRenderPassHelper( queueAction { it.bindSampler(name, texture.glTextureView) } } + + fun dontSetDefaultUniforms() { + hasSetDefaultUniforms = true + } + fun setAllDefaultUniforms() { + hasSetDefaultUniforms = true queueAction { RenderSystem.bindDefaultUniforms(it) } @@ -129,6 +136,7 @@ class CustomRenderPassHelper( fun draw(): DrawToken { val vertexData = (ErrorUtil.notNullOr(vertices, "No vertex data uploaded") { return DrawToken }) + ErrorUtil.softCheck("Missing default uniforms", hasSetDefaultUniforms) ErrorUtil.softCheck("Missing a pipeline", hasPipelineAction) val renderPass = queueClose( commandEncoder.createRenderPass( diff --git a/src/main/kotlin/util/render/CustomRenderLayers.kt b/src/main/kotlin/util/render/CustomRenderLayers.kt index 13412ec..a133cbf 100644 --- a/src/main/kotlin/util/render/CustomRenderLayers.kt +++ b/src/main/kotlin/util/render/CustomRenderLayers.kt @@ -47,7 +47,7 @@ object CustomRenderPipelines { .withLocation(Firmament.identifier("gui_textured_overlay_tris_circle")) .withUniform("CutoutRadius", UniformType.UNIFORM_BUFFER) .withFragmentShader(Firmament.identifier("circle_discard_color")) - .withBlend(BlendFunction.TRANSLUCENT) +// .withBlend(BlendFunction.TRANSLUCENT) .build() val PARALLAX_CAPE_SHADER = RenderPipeline.builder(RenderPipelines.ENTITY_SNIPPET) diff --git a/src/main/kotlin/util/render/DumpTexture.kt b/src/main/kotlin/util/render/DumpTexture.kt new file mode 100644 index 0000000..a7b4e78 --- /dev/null +++ b/src/main/kotlin/util/render/DumpTexture.kt @@ -0,0 +1,34 @@ +package moe.nea.firmament.util.render + +import com.mojang.blaze3d.buffers.GpuBuffer +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.textures.GpuTexture +import java.io.File +import net.minecraft.client.texture.NativeImage + +fun dumpTexture(gpuTexture: GpuTexture, name: String) { + val w = gpuTexture.getWidth(0) + val h = gpuTexture.getHeight(0) + val buffer = RenderSystem.getDevice() + .createBuffer( + { "Dump Buffer" }, + GpuBuffer.USAGE_COPY_DST or GpuBuffer.USAGE_MAP_READ, + w * h * gpuTexture.getFormat().pixelSize() + ) + val commandEncoder = RenderSystem.getDevice().createCommandEncoder() + commandEncoder.copyTextureToBuffer( + gpuTexture, buffer, 0, { + val nativeImage = NativeImage(w, h, false) + commandEncoder.mapBuffer(buffer, true, false).use { mappedView -> + for (i in 0..<w) { + for (j in 0..<h) { + val color = mappedView.data().getInt((j + i * w) * gpuTexture.format.pixelSize()) + nativeImage.setColor(j, h - i - 1, color) + } + } + } + buffer.close() + nativeImage.writeTo(File("$name.png")) + }, 0 + ) +} diff --git a/src/main/kotlin/util/render/RenderCircleProgress.kt b/src/main/kotlin/util/render/RenderCircleProgress.kt index 2c837d3..301eec4 100644 --- a/src/main/kotlin/util/render/RenderCircleProgress.kt +++ b/src/main/kotlin/util/render/RenderCircleProgress.kt @@ -97,6 +97,7 @@ object RenderCircleProgress { false, ).use { renderPass -> renderPass.uploadVertices(buffer) + renderPass.setAllDefaultUniforms() renderPass.setPipeline(state.layer.pipeline) renderPass.setUniform("CutoutRadius", 4) { it.putFloat(state.innerCutoutRadius) |
