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.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
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user