Rename to GPULightRenderer

This commit is contained in:
DBotThePony 2022-09-16 13:29:00 +07:00
parent 9be1dcadd1
commit 45b3e203ba
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 18 additions and 32 deletions

View File

@ -3,21 +3,11 @@ package ru.dbotthepony.kstarbound
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import org.lwjgl.Version import org.lwjgl.Version
import org.lwjgl.glfw.GLFW.glfwSetWindowShouldClose import org.lwjgl.glfw.GLFW.glfwSetWindowShouldClose
import org.lwjgl.opengl.GL11.GL_LINES
import org.lwjgl.opengl.GL11.GL_TRIANGLES
import ru.dbotthepony.kstarbound.client.StarboundClient import ru.dbotthepony.kstarbound.client.StarboundClient
import ru.dbotthepony.kstarbound.client.gl.program.GLHardLightGeometryProgram
import ru.dbotthepony.kstarbound.client.gl.program.GLSoftLightGeometryProgram
import ru.dbotthepony.kstarbound.client.gl.vertex.shadowQuad
import ru.dbotthepony.kstarbound.client.gl.vertex.quad
import ru.dbotthepony.kstarbound.client.render.LightRenderer
import ru.dbotthepony.kstarbound.io.* import ru.dbotthepony.kstarbound.io.*
import ru.dbotthepony.kstarbound.world.ChunkPos import ru.dbotthepony.kstarbound.world.ChunkPos
import ru.dbotthepony.kstarbound.world.entities.PlayerEntity import ru.dbotthepony.kstarbound.world.entities.PlayerEntity
import ru.dbotthepony.kvector.matrix.Matrix4fStack
import ru.dbotthepony.kvector.vector.Color
import ru.dbotthepony.kvector.vector.ndouble.Vector2d import ru.dbotthepony.kvector.vector.ndouble.Vector2d
import ru.dbotthepony.kvector.vector.nfloat.Vector2f
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.DataInputStream import java.io.DataInputStream
import java.io.File import java.io.File

View File

@ -1,6 +1,5 @@
package ru.dbotthepony.kstarbound.client package ru.dbotthepony.kstarbound.client
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
import org.lwjgl.opengl.GL11.GL_LINES import org.lwjgl.opengl.GL11.GL_LINES
import org.lwjgl.opengl.GL11.GL_TRIANGLES import org.lwjgl.opengl.GL11.GL_TRIANGLES
import ru.dbotthepony.kstarbound.client.gl.GLStateTracker import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
@ -10,11 +9,10 @@ import ru.dbotthepony.kstarbound.client.gl.vertex.GeometryType
import ru.dbotthepony.kstarbound.client.gl.vertex.StatefulVertexBuilder import ru.dbotthepony.kstarbound.client.gl.vertex.StatefulVertexBuilder
import ru.dbotthepony.kstarbound.client.gl.vertex.quad import ru.dbotthepony.kstarbound.client.gl.vertex.quad
import ru.dbotthepony.kstarbound.client.gl.vertex.shadowLine import ru.dbotthepony.kstarbound.client.gl.vertex.shadowLine
import ru.dbotthepony.kstarbound.client.gl.vertex.shadowQuad
import ru.dbotthepony.kstarbound.client.render.ConfiguredStaticMesh import ru.dbotthepony.kstarbound.client.render.ConfiguredStaticMesh
import ru.dbotthepony.kstarbound.client.render.EntityRenderer import ru.dbotthepony.kstarbound.client.render.EntityRenderer
import ru.dbotthepony.kstarbound.client.render.ILayeredRenderer import ru.dbotthepony.kstarbound.client.render.ILayeredRenderer
import ru.dbotthepony.kstarbound.client.render.LightRenderer import ru.dbotthepony.kstarbound.client.render.GPULightRenderer
import ru.dbotthepony.kstarbound.client.render.TileLayerList import ru.dbotthepony.kstarbound.client.render.TileLayerList
import ru.dbotthepony.kstarbound.defs.liquid.LiquidDefinition import ru.dbotthepony.kstarbound.defs.liquid.LiquidDefinition
import ru.dbotthepony.kstarbound.world.* import ru.dbotthepony.kstarbound.world.*
@ -26,7 +24,6 @@ import ru.dbotthepony.kvector.vector.ndouble.Vector2d
import ru.dbotthepony.kvector.vector.nfloat.Vector2f import ru.dbotthepony.kvector.vector.nfloat.Vector2f
import ru.dbotthepony.kvector.vector.nfloat.Vector3f import ru.dbotthepony.kvector.vector.nfloat.Vector3f
import java.io.Closeable import java.io.Closeable
import java.util.IdentityHashMap
import java.util.LinkedList import java.util.LinkedList
/** /**
@ -209,10 +206,10 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
foregroundRenderer.autoUpload() foregroundRenderer.autoUpload()
} }
private inner class ShadowGeometryTracker(val x: Int, val y: Int) : LightRenderer.ShadowGeometryRenderer { private inner class ShadowGeometryTracker(val x: Int, val y: Int) : GPULightRenderer.ShadowGeometryRenderer {
private val hardShadowGeometry = StatefulVertexBuilder(state, LightRenderer.SHADOW_FORMAT, GeometryType.LINES) private val hardShadowGeometry = StatefulVertexBuilder(state, GPULightRenderer.SHADOW_FORMAT, GeometryType.LINES)
private var hardShadowGeometryRev = -1 private var hardShadowGeometryRev = -1
private val softShadowGeometry = StatefulVertexBuilder(state, LightRenderer.SHADOW_FORMAT_SOFT, GeometryType.QUADS_ALTERNATIVE) private val softShadowGeometry = StatefulVertexBuilder(state, GPULightRenderer.SHADOW_FORMAT_SOFT, GeometryType.QUADS_ALTERNATIVE)
private var softShadowGeometryRev = -1 private var softShadowGeometryRev = -1
private fun buildGeometry(builder: StatefulVertexBuilder, line: (StatefulVertexBuilder, Float, Float, Float, Float) -> Unit) { private fun buildGeometry(builder: StatefulVertexBuilder, line: (StatefulVertexBuilder, Float, Float, Float, Float) -> Unit) {
@ -258,7 +255,7 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
} }
override fun renderHardGeometry( override fun renderHardGeometry(
renderer: LightRenderer, renderer: GPULightRenderer,
lightPosition: Vector2f, lightPosition: Vector2f,
lightRadius: Float, lightRadius: Float,
stack: Matrix4fStack, stack: Matrix4fStack,
@ -272,7 +269,7 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
} }
override fun renderSoftGeometry( override fun renderSoftGeometry(
renderer: LightRenderer, renderer: GPULightRenderer,
lightPosition: Vector2f, lightPosition: Vector2f,
lightRadius: Float, lightRadius: Float,
stack: Matrix4fStack, stack: Matrix4fStack,
@ -302,11 +299,11 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
* Должен быть использован только один раз, после выкинут, иначе поведение * Должен быть использован только один раз, после выкинут, иначе поведение
* кода невозможно будет предсказать * кода невозможно будет предсказать
*/ */
inner class OneShotRenderer constructor(val origin: ChunkPos = pos) : ILayeredRenderer, LightRenderer.ShadowGeometryRenderer { inner class OneShotRenderer constructor(val origin: ChunkPos = pos) : ILayeredRenderer, GPULightRenderer.ShadowGeometryRenderer {
private val layerQueue = ArrayDeque<Pair<(Matrix4fStack) -> Unit, Int>>() private val layerQueue = ArrayDeque<Pair<(Matrix4fStack) -> Unit, Int>>()
override fun renderHardGeometry( override fun renderHardGeometry(
renderer: LightRenderer, renderer: GPULightRenderer,
lightPosition: Vector2f, lightPosition: Vector2f,
lightRadius: Float, lightRadius: Float,
stack: Matrix4fStack, stack: Matrix4fStack,
@ -342,7 +339,7 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
} }
override fun renderSoftGeometry( override fun renderSoftGeometry(
renderer: LightRenderer, renderer: GPULightRenderer,
lightPosition: Vector2f, lightPosition: Vector2f,
lightRadius: Float, lightRadius: Float,
stack: Matrix4fStack, stack: Matrix4fStack,

View File

@ -15,7 +15,7 @@ import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
import ru.dbotthepony.kstarbound.client.gl.ScissorRect import ru.dbotthepony.kstarbound.client.gl.ScissorRect
import ru.dbotthepony.kstarbound.client.input.UserInput import ru.dbotthepony.kstarbound.client.input.UserInput
import ru.dbotthepony.kstarbound.client.render.Camera import ru.dbotthepony.kstarbound.client.render.Camera
import ru.dbotthepony.kstarbound.client.render.LightRenderer import ru.dbotthepony.kstarbound.client.render.GPULightRenderer
import ru.dbotthepony.kstarbound.client.render.TextAlignY import ru.dbotthepony.kstarbound.client.render.TextAlignY
import ru.dbotthepony.kstarbound.util.formatBytesShort import ru.dbotthepony.kstarbound.util.formatBytesShort
import ru.dbotthepony.kvector.matrix.nfloat.Matrix4f import ru.dbotthepony.kvector.matrix.nfloat.Matrix4f
@ -222,7 +222,7 @@ class StarboundClient : AutoCloseable {
} }
val gl = GLStateTracker() val gl = GLStateTracker()
val lightRenderer = LightRenderer(gl) val lightRenderer = GPULightRenderer(gl)
init { init {
lightRenderer.resizeFramebuffer(viewportWidth, viewportHeight) lightRenderer.resizeFramebuffer(viewportWidth, viewportHeight)

View File

@ -10,7 +10,7 @@ import ru.dbotthepony.kstarbound.client.gl.vertex.StreamVertexBuilder
import ru.dbotthepony.kstarbound.client.gl.vertex.GeometryType import ru.dbotthepony.kstarbound.client.gl.vertex.GeometryType
import ru.dbotthepony.kstarbound.client.gl.vertex.QuadTransformers import ru.dbotthepony.kstarbound.client.gl.vertex.QuadTransformers
import ru.dbotthepony.kstarbound.client.gl.vertex.quad import ru.dbotthepony.kstarbound.client.gl.vertex.quad
import ru.dbotthepony.kstarbound.client.render.LightRenderer import ru.dbotthepony.kstarbound.client.render.GPULightRenderer
import ru.dbotthepony.kvector.vector.Color import ru.dbotthepony.kvector.vector.Color
import kotlin.properties.ReadOnlyProperty import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@ -90,7 +90,7 @@ class GLHardLightGeometryProgram(state: GLStateTracker) : GLInternalProgram(stat
val lightPenetration = this["lightPenetration"]!! val lightPenetration = this["lightPenetration"]!!
val builder by lazy { val builder by lazy {
StreamVertexBuilder(state, LightRenderer.SHADOW_FORMAT, GeometryType.QUADS_AS_LINES, 32) StreamVertexBuilder(state, GPULightRenderer.SHADOW_FORMAT, GeometryType.QUADS_AS_LINES, 32)
} }
} }
@ -109,7 +109,7 @@ class GLSoftLightGeometryProgram(state: GLStateTracker) : GLInternalProgram(stat
val lightPositionAndSize = this["lightPositionAndSize"]!! val lightPositionAndSize = this["lightPositionAndSize"]!!
val builder by lazy { val builder by lazy {
StreamVertexBuilder(state, LightRenderer.SHADOW_FORMAT_SOFT, GeometryType.QUADS_AS_LINES, 32) StreamVertexBuilder(state, GPULightRenderer.SHADOW_FORMAT_SOFT, GeometryType.QUADS_AS_LINES, 32)
} }
} }

View File

@ -1,6 +1,5 @@
package ru.dbotthepony.kstarbound.client.render package ru.dbotthepony.kstarbound.client.render
import org.lwjgl.opengl.GL11.GL_BACK
import org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT import org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT
import org.lwjgl.opengl.GL11.GL_FRONT import org.lwjgl.opengl.GL11.GL_FRONT
import org.lwjgl.opengl.GL11.GL_RGBA import org.lwjgl.opengl.GL11.GL_RGBA
@ -26,15 +25,15 @@ import ru.dbotthepony.kvector.vector.nfloat.Vector3f
// Huge thanks to articles by Scott [slembcke] Lembcke! // Huge thanks to articles by Scott [slembcke] Lembcke!
// https://slembcke.github.io/SuperFastHardShadows // https://slembcke.github.io/SuperFastHardShadows
// https://slembcke.github.io/SuperFastSoftShadows // https://slembcke.github.io/SuperFastSoftShadows
class LightRenderer(val state: GLStateTracker) { class GPULightRenderer(val state: GLStateTracker) {
interface ShadowGeometryRenderer { interface ShadowGeometryRenderer {
fun renderHardGeometry(renderer: LightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLHardLightGeometryProgram) fun renderHardGeometry(renderer: GPULightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLHardLightGeometryProgram)
fun renderSoftGeometry(renderer: LightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLSoftLightGeometryProgram) fun renderSoftGeometry(renderer: GPULightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLSoftLightGeometryProgram)
} }
private val geometry = ArrayList<ShadowGeometryRenderer>() private val geometry = ArrayList<ShadowGeometryRenderer>()
fun addShadowGeometry(geometry: ShadowGeometryRenderer): LightRenderer { fun addShadowGeometry(geometry: ShadowGeometryRenderer): GPULightRenderer {
this.geometry.add(geometry) this.geometry.add(geometry)
return this return this
} }