Rename to GPULightRenderer
This commit is contained in:
parent
9be1dcadd1
commit
45b3e203ba
@ -3,21 +3,11 @@ package ru.dbotthepony.kstarbound
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import org.lwjgl.Version
|
||||
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.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.world.ChunkPos
|
||||
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.nfloat.Vector2f
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.DataInputStream
|
||||
import java.io.File
|
||||
|
@ -1,6 +1,5 @@
|
||||
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_TRIANGLES
|
||||
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.quad
|
||||
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.EntityRenderer
|
||||
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.defs.liquid.LiquidDefinition
|
||||
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.Vector3f
|
||||
import java.io.Closeable
|
||||
import java.util.IdentityHashMap
|
||||
import java.util.LinkedList
|
||||
|
||||
/**
|
||||
@ -209,10 +206,10 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
|
||||
foregroundRenderer.autoUpload()
|
||||
}
|
||||
|
||||
private inner class ShadowGeometryTracker(val x: Int, val y: Int) : LightRenderer.ShadowGeometryRenderer {
|
||||
private val hardShadowGeometry = StatefulVertexBuilder(state, LightRenderer.SHADOW_FORMAT, GeometryType.LINES)
|
||||
private inner class ShadowGeometryTracker(val x: Int, val y: Int) : GPULightRenderer.ShadowGeometryRenderer {
|
||||
private val hardShadowGeometry = StatefulVertexBuilder(state, GPULightRenderer.SHADOW_FORMAT, GeometryType.LINES)
|
||||
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 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(
|
||||
renderer: LightRenderer,
|
||||
renderer: GPULightRenderer,
|
||||
lightPosition: Vector2f,
|
||||
lightRadius: Float,
|
||||
stack: Matrix4fStack,
|
||||
@ -272,7 +269,7 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
|
||||
}
|
||||
|
||||
override fun renderSoftGeometry(
|
||||
renderer: LightRenderer,
|
||||
renderer: GPULightRenderer,
|
||||
lightPosition: Vector2f,
|
||||
lightRadius: Float,
|
||||
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>>()
|
||||
|
||||
override fun renderHardGeometry(
|
||||
renderer: LightRenderer,
|
||||
renderer: GPULightRenderer,
|
||||
lightPosition: Vector2f,
|
||||
lightRadius: Float,
|
||||
stack: Matrix4fStack,
|
||||
@ -342,7 +339,7 @@ class ClientChunk(world: ClientWorld, pos: ChunkPos) : Chunk<ClientWorld, Client
|
||||
}
|
||||
|
||||
override fun renderSoftGeometry(
|
||||
renderer: LightRenderer,
|
||||
renderer: GPULightRenderer,
|
||||
lightPosition: Vector2f,
|
||||
lightRadius: Float,
|
||||
stack: Matrix4fStack,
|
||||
|
@ -15,7 +15,7 @@ import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
|
||||
import ru.dbotthepony.kstarbound.client.gl.ScissorRect
|
||||
import ru.dbotthepony.kstarbound.client.input.UserInput
|
||||
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.util.formatBytesShort
|
||||
import ru.dbotthepony.kvector.matrix.nfloat.Matrix4f
|
||||
@ -222,7 +222,7 @@ class StarboundClient : AutoCloseable {
|
||||
}
|
||||
|
||||
val gl = GLStateTracker()
|
||||
val lightRenderer = LightRenderer(gl)
|
||||
val lightRenderer = GPULightRenderer(gl)
|
||||
|
||||
init {
|
||||
lightRenderer.resizeFramebuffer(viewportWidth, viewportHeight)
|
||||
|
@ -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.QuadTransformers
|
||||
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 kotlin.properties.ReadOnlyProperty
|
||||
import kotlin.reflect.KProperty
|
||||
@ -90,7 +90,7 @@ class GLHardLightGeometryProgram(state: GLStateTracker) : GLInternalProgram(stat
|
||||
val lightPenetration = this["lightPenetration"]!!
|
||||
|
||||
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 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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
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_FRONT
|
||||
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!
|
||||
// https://slembcke.github.io/SuperFastHardShadows
|
||||
// https://slembcke.github.io/SuperFastSoftShadows
|
||||
class LightRenderer(val state: GLStateTracker) {
|
||||
class GPULightRenderer(val state: GLStateTracker) {
|
||||
interface ShadowGeometryRenderer {
|
||||
fun renderHardGeometry(renderer: LightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLHardLightGeometryProgram)
|
||||
fun renderSoftGeometry(renderer: LightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLSoftLightGeometryProgram)
|
||||
fun renderHardGeometry(renderer: GPULightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLHardLightGeometryProgram)
|
||||
fun renderSoftGeometry(renderer: GPULightRenderer, lightPosition: Vector2f, lightRadius: Float, stack: Matrix4fStack, program: GLSoftLightGeometryProgram)
|
||||
}
|
||||
|
||||
private val geometry = ArrayList<ShadowGeometryRenderer>()
|
||||
|
||||
fun addShadowGeometry(geometry: ShadowGeometryRenderer): LightRenderer {
|
||||
fun addShadowGeometry(geometry: ShadowGeometryRenderer): GPULightRenderer {
|
||||
this.geometry.add(geometry)
|
||||
return this
|
||||
}
|
Loading…
Reference in New Issue
Block a user