Skip to content

Commit 3557e6a

Browse files
committed
render screen faces and lines last as theyre most likely to have transparency
1 parent bc62c2d commit 3557e6a

File tree

4 files changed

+55
-54
lines changed

4 files changed

+55
-54
lines changed

src/main/kotlin/com/lambda/config/groups/ScreenLineSettings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ScreenLineSettings(
3333
Dash("Dash")
3434
}
3535

36-
val widthSetting by c.setting("${prefix}Width", 10, 1..100, 1, "The width of the line", visibility = visibility).group(*baseGroup).index()
36+
val widthSetting by c.setting("${prefix}Width", 20, 1..100, 1, "The width of the line", visibility = visibility).group(*baseGroup).index()
3737
override val width get() = widthSetting * 0.00005f
3838

3939
override val startColor by c.setting("${prefix}Start Color", Color.WHITE, "The color at the start of the line", visibility = visibility).group(*baseGroup, Group.Color).index()

src/main/kotlin/com/lambda/graphics/mc/RenderBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.lambda.graphics.texture.LambdaImageAtlas
2828
import com.lambda.graphics.util.DirectionMask
2929
import com.lambda.graphics.util.DirectionMask.hasDirection
3030
import com.lambda.util.BlockUtils.blockState
31+
import com.mojang.blaze3d.textures.GpuTextureView
3132
import net.minecraft.block.BlockState
3233
import net.minecraft.client.font.TextRenderer
3334
import net.minecraft.client.render.OverlayTexture
@@ -851,7 +852,7 @@ class RenderBuilder(private val cameraPos: Vec3d, var depthTest: Boolean = false
851852
private val lighting: ItemLighting,
852853
private val lightDirs: Pair<Vector3f, Vector3f>,
853854
private val isSideLit: Boolean,
854-
private val onSubmission: (List<RegionVertexCollector.ModelVertex>, com.mojang.blaze3d.textures.GpuTextureView) -> Unit
855+
private val onSubmission: (List<RegionVertexCollector.ModelVertex>, GpuTextureView) -> Unit
855856
) : OrderedRenderCommandQueue {
856857
var currentGlint: Boolean = false
857858

src/main/kotlin/com/lambda/graphics/mc/renderer/AbstractRenderer.kt

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import kotlin.collections.isNotEmpty
3030

3131
abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.() -> Boolean) {
3232
protected abstract fun getRendererTransforms(): List<Pair<RegionRenderer, GpuBufferSlice>>
33-
33+
3434
protected abstract fun getScreenRenderers(): List<RegionRenderer>
3535

3636
protected abstract val currentFontAtlas: SDFFontAtlas?
@@ -41,7 +41,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
4141
if (chunks.isEmpty()) return
4242

4343
RegionRenderer.createRenderPass("$name Faces", depth)?.use { pass ->
44-
pass.setPipeline(RendererUtils.facesPipeline)
44+
pass.setPipeline(RendererUtils.worldFacesPipeline)
4545
RenderSystem.bindDefaultUniforms(pass)
4646
chunks.forEach { (renderer, transform) ->
4747
pass.setUniform("DynamicTransforms", transform)
@@ -50,7 +50,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
5050
}
5151

5252
RegionRenderer.createRenderPass("$name Edges", depth)?.use { pass ->
53-
pass.setPipeline(RendererUtils.edgesPipeline)
53+
pass.setPipeline(RendererUtils.worldLinesPipeline)
5454
RenderSystem.bindDefaultUniforms(pass)
5555
chunks.forEach { (renderer, transform) ->
5656
pass.setUniform("DynamicTransforms", transform)
@@ -66,7 +66,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
6666
val sampler = atlas.sampler
6767
if (textureView != null && sampler != null) {
6868
RegionRenderer.createRenderPass("$name Text", depth)?.use { pass ->
69-
pass.setPipeline(RendererUtils.textPipeline)
69+
pass.setPipeline(RendererUtils.worldTextPipeline)
7070
RenderSystem.bindDefaultUniforms(pass)
7171
pass.bindTexture("Sampler0", textureView, sampler)
7272
textChunks.forEach { (renderer, transform) ->
@@ -80,13 +80,13 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
8080
val imageChunks = chunks.filter { (renderer, _) -> renderer.hasWorldImageData() }
8181
if (imageChunks.isNotEmpty()) {
8282
RendererUtils.ensureGlintTextureLoaded()
83-
83+
8484
RegionRenderer.createRenderPass("$name World Images", depth)?.use { pass ->
8585
pass.setPipeline(RendererUtils.worldImagePipeline)
8686
RenderSystem.bindDefaultUniforms(pass)
8787

8888
RendererUtils.bindGlintTexture(pass, "Sampler1")
89-
89+
9090
imageChunks.forEach { (renderer, transform) ->
9191
pass.setUniform("DynamicTransforms", transform)
9292
renderer.renderWorldImages(pass)
@@ -97,19 +97,19 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
9797
val modelChunks = chunks.filter { (renderer, _) -> renderer.hasModelData() }
9898
if (modelChunks.isNotEmpty()) {
9999
RendererUtils.ensureGlintTextureLoaded()
100-
100+
101101
val glintUniform = RendererUtils.createGlintUniform(8.0f)
102-
102+
103103
RegionRenderer.createRenderPass("$name World Models", depth)?.use { pass ->
104-
pass.setPipeline(RendererUtils.modelPipeline)
104+
pass.setPipeline(RendererUtils.worldModelPipeline)
105105
RenderSystem.bindDefaultUniforms(pass)
106106

107107
RendererUtils.bindOverlayTexture(pass, "Sampler1")
108108
RendererUtils.bindLightmapTexture(pass, "Sampler2")
109109
RendererUtils.bindGlintTexture(pass, "Sampler3")
110110

111111
pass.setUniform("GlintTransforms", glintUniform)
112-
112+
113113
modelChunks.forEach { (renderer, transform) ->
114114
pass.setUniform("DynamicTransforms", transform)
115115
renderer.renderModels(pass)
@@ -128,7 +128,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
128128
val style = chunks.firstNotNullOfOrNull { it.first.getOutlineStyle(id) } ?: OutlineStyle.DEFAULT
129129

130130
RegionRenderer.createRenderPass("$name Outlined Draw $id", depth)?.use { pass ->
131-
pass.setPipeline(RendererUtils.facesPipeline)
131+
pass.setPipeline(RendererUtils.worldFacesPipeline)
132132
RenderSystem.bindDefaultUniforms(pass)
133133
chunks.forEach { (renderer, transform) ->
134134
if (renderer.hasOutlinedData(id)) {
@@ -137,7 +137,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
137137
}
138138
}
139139

140-
pass.setPipeline(RendererUtils.edgesPipeline)
140+
pass.setPipeline(RendererUtils.worldLinesPipeline)
141141
RenderSystem.bindDefaultUniforms(pass)
142142
chunks.forEach { (renderer, transform) ->
143143
if (renderer.hasOutlinedData(id)) {
@@ -148,7 +148,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
148148

149149
val atlasD = currentFontAtlas
150150
if (atlasD != null && atlasD.textureView != null) {
151-
pass.setPipeline(RendererUtils.textPipeline)
151+
pass.setPipeline(RendererUtils.worldTextPipeline)
152152
RenderSystem.bindDefaultUniforms(pass)
153153
pass.bindTexture("Sampler0", atlasD.textureView!!, atlasD.sampler ?: nearestSampler)
154154
chunks.forEach { (renderer, transform) ->
@@ -169,7 +169,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
169169
}
170170
}
171171

172-
pass.setPipeline(RendererUtils.modelPipeline)
172+
pass.setPipeline(RendererUtils.worldModelPipeline)
173173
RenderSystem.bindDefaultUniforms(pass)
174174
RendererUtils.bindOverlayTexture(pass, "Sampler1")
175175
RendererUtils.bindLightmapTexture(pass, "Sampler2")
@@ -187,7 +187,7 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
187187
val groupTarget = OutlineRenderer.getGroupView() ?: return@forEach
188188
val groupDepthView = OutlineRenderer.getGroupDepthView() ?: return@forEach
189189

190-
RenderSystem.getDevice()
190+
RenderSystem.getDevice()
191191
.createCommandEncoder()
192192
.createRenderPass(
193193
{ "$name Outline Group $id - Draw" },
@@ -251,17 +251,17 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
251251
}
252252
}
253253

254-
OutlineRenderer.endGroupPass(style, depth)
255-
}
254+
OutlineRenderer.endGroupPass(style, depth)
256255
}
256+
}
257257
}
258258

259259
fun renderScreen() {
260260
val renderers = getScreenRenderers()
261261

262262
RendererUtils.withScreenContext {
263263
val dynamicTransform = RendererUtils.createScreenDynamicTransform()
264-
264+
265265
RendererUtils.clearScreenDepthBuffer()
266266

267267
fun getScreenPass(label: String): RenderPass? =
@@ -270,11 +270,11 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
270270
val modelRenderers = renderers.filter { it.hasScreenModelData() }
271271
if (modelRenderers.isNotEmpty()) {
272272
RendererUtils.ensureGlintTextureLoaded()
273-
273+
274274
val glintUniform = RendererUtils.createGlintUniform(8.0f)
275-
275+
276276
getScreenPass("$name Screen Models")?.use { pass ->
277-
pass.setPipeline(RendererUtils.modelPipeline)
277+
pass.setPipeline(RendererUtils.worldModelPipeline)
278278
RenderSystem.bindDefaultUniforms(pass)
279279

280280
pass.setUniform("DynamicTransforms", dynamicTransform)
@@ -283,23 +283,26 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
283283
RendererUtils.bindOverlayTexture(pass, "Sampler1")
284284
RendererUtils.bindLightmapTexture(pass, "Sampler2")
285285
RendererUtils.bindGlintTexture(pass, "Sampler3")
286-
286+
287287
modelRenderers.forEach { it.renderScreenModels(pass) }
288288
}
289289
}
290290

291-
getScreenPass("$name Screen Faces")?.use { pass ->
292-
pass.setPipeline(RendererUtils.screenFacesPipeline)
293-
RenderSystem.bindDefaultUniforms(pass)
294-
pass.setUniform("DynamicTransforms", dynamicTransform)
295-
renderers.forEach { it.renderScreenFaces(pass) }
296-
}
291+
val imageRenderers = renderers.filter { it.hasScreenImageData() }
292+
if (imageRenderers.isNotEmpty()) {
293+
RendererUtils.ensureGlintTextureLoaded()
297294

298-
getScreenPass("$name Screen Edges")?.use { pass ->
299-
pass.setPipeline(RendererUtils.screenEdgesPipeline)
300-
RenderSystem.bindDefaultUniforms(pass)
301-
pass.setUniform("DynamicTransforms", dynamicTransform)
302-
renderers.forEach { it.renderScreenEdges(pass) }
295+
val glintTransform = RendererUtils.createScreenDynamicTransformWithGlint()
296+
297+
getScreenPass("$name Screen Images")?.use { pass ->
298+
pass.setPipeline(RendererUtils.screenImagePipeline)
299+
RenderSystem.bindDefaultUniforms(pass)
300+
pass.setUniform("DynamicTransforms", glintTransform)
301+
302+
RendererUtils.bindGlintTexture(pass, "Sampler1")
303+
304+
imageRenderers.forEach { it.renderScreenImages(pass) }
305+
}
303306
}
304307

305308
val textRenderers = renderers.filter { it.hasScreenTextData() }
@@ -319,21 +322,18 @@ abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.()
319322
}
320323
}
321324

322-
val imageRenderers = renderers.filter { it.hasScreenImageData() }
323-
if (imageRenderers.isNotEmpty()) {
324-
RendererUtils.ensureGlintTextureLoaded()
325-
326-
val glintTransform = RendererUtils.createScreenDynamicTransformWithGlint()
327-
328-
getScreenPass("$name Screen Images")?.use { pass ->
329-
pass.setPipeline(RendererUtils.screenImagePipeline)
330-
RenderSystem.bindDefaultUniforms(pass)
331-
pass.setUniform("DynamicTransforms", glintTransform)
325+
getScreenPass("$name Screen Faces")?.use { pass ->
326+
pass.setPipeline(RendererUtils.screenFacesPipeline)
327+
RenderSystem.bindDefaultUniforms(pass)
328+
pass.setUniform("DynamicTransforms", dynamicTransform)
329+
renderers.forEach { it.renderScreenFaces(pass) }
330+
}
332331

333-
RendererUtils.bindGlintTexture(pass, "Sampler1")
334-
335-
imageRenderers.forEach { it.renderScreenImages(pass) }
336-
}
332+
getScreenPass("$name Screen Edges")?.use { pass ->
333+
pass.setPipeline(RendererUtils.screenLinesPipeline)
334+
RenderSystem.bindDefaultUniforms(pass)
335+
pass.setUniform("DynamicTransforms", dynamicTransform)
336+
renderers.forEach { it.renderScreenEdges(pass) }
337337
}
338338
}
339339
}

src/main/kotlin/com/lambda/graphics/mc/renderer/RendererUtils.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ import kotlin.math.sqrt
4646
object RendererUtils {
4747
private val screenProjectionMatrix = ProjectionMatrix2("lambda_screen", -1000f, 1000f, false)
4848

49-
val facesPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_QUADS
50-
val edgesPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_LINES
51-
val textPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_SDF_TEXT
49+
val worldFacesPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_QUADS
50+
val worldLinesPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_LINES
51+
val worldTextPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_SDF_TEXT
5252
val worldImagePipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_IMAGES
53-
val modelPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_MODELS
53+
val worldModelPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_MODELS
5454

5555
val outlineFacesPipeline: RenderPipeline get() = LambdaRenderPipelines.OUTLINE_QUADS
5656
val outlineEdgesPipeline: RenderPipeline get() = LambdaRenderPipelines.OUTLINE_LINES
@@ -59,7 +59,7 @@ object RendererUtils {
5959
val outlineModelPipeline: RenderPipeline get() = LambdaRenderPipelines.WORLD_MODELS
6060

6161
val screenFacesPipeline: RenderPipeline get() = LambdaRenderPipelines.SCREEN_QUADS
62-
val screenEdgesPipeline: RenderPipeline get() = LambdaRenderPipelines.SCREEN_LINES
62+
val screenLinesPipeline: RenderPipeline get() = LambdaRenderPipelines.SCREEN_LINES
6363
val screenTextPipeline: RenderPipeline get() = LambdaRenderPipelines.SCREEN_TEXT
6464
val screenImagePipeline: RenderPipeline get() = LambdaRenderPipelines.SCREEN_IMAGES
6565

0 commit comments

Comments
 (0)