aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-07-30 21:01:20 +0200
committerLinnea Gräf <nea@nea.moe>2025-07-30 21:01:20 +0200
commitaf3d76561468cfbffddd19efcb1a4fe238f2ac15 (patch)
treee0f7ebaab01acd0d19badf9e4d41b7f555820d8c /src
parent6300ff493fe90fd06162d2f4ce91339c07a50d11 (diff)
downloadFirmament-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.kt8
-rw-r--r--src/main/kotlin/util/render/CustomRenderLayers.kt2
-rw-r--r--src/main/kotlin/util/render/DumpTexture.kt34
-rw-r--r--src/main/kotlin/util/render/RenderCircleProgress.kt1
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)