mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
putting some actors into their own framebuffer for shadowing
This commit is contained in:
@@ -76,6 +76,9 @@ object IngameRenderer : Disposable {
|
||||
private lateinit var fboEmissive: Float16FrameBuffer
|
||||
private lateinit var fboMixedOut: Float16FrameBuffer
|
||||
|
||||
private lateinit var fboRGBactorsBehind: Float16FrameBuffer // for small shadow eff; A channel is for glow effects so they don't get shadow effects
|
||||
private lateinit var fboRGBactorsMiddle: Float16FrameBuffer // for large shadew eff; A channel is for glow effects so they don't get shadow effects
|
||||
|
||||
private lateinit var rgbTex: TextureRegion
|
||||
private lateinit var aTex: TextureRegion
|
||||
private lateinit var mixedOutTex: TextureRegion
|
||||
@@ -498,9 +501,35 @@ object IngameRenderer : Disposable {
|
||||
fboRGB_lightMixed0.inAction(null, null) { clearBuffer() }
|
||||
fboRGB_lightMixed.inAction(null, null) { clearBuffer() }
|
||||
|
||||
fboRGB.inAction(camera, batch) {
|
||||
|
||||
fboRGBactorsBehind.inAction(camera, batch) {
|
||||
clearBuffer()
|
||||
setCameraPosition(0f, 0f)
|
||||
|
||||
batch.inUse {
|
||||
batch.shader = shaderForActors
|
||||
batch.color = Color.WHITE
|
||||
moveCameraToWorldCoord()
|
||||
actorsRenderBehind?.forEach { it.drawBody(frameDelta, batch) }
|
||||
}
|
||||
}
|
||||
|
||||
fboRGBactorsMiddle.inAction(camera, batch) {
|
||||
clearBuffer()
|
||||
setCameraPosition(0f, 0f)
|
||||
|
||||
batch.inUse {
|
||||
batch.shader = shaderForActors
|
||||
batch.color = Color.WHITE
|
||||
moveCameraToWorldCoord()
|
||||
actorsRenderMiddle?.forEach { it.drawBody(frameDelta, batch) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fboRGB.inAction(camera, batch) {
|
||||
setCameraPosition(0f, 0f)
|
||||
|
||||
BlocksDrawer.drawWall(batch.projectionMatrix, false)
|
||||
|
||||
batch.inUse {
|
||||
@@ -508,7 +537,12 @@ object IngameRenderer : Disposable {
|
||||
batch.color = Color.WHITE
|
||||
moveCameraToWorldCoord()
|
||||
actorsRenderFarBehind?.forEach { it.drawBody(frameDelta, batch) }
|
||||
actorsRenderBehind?.forEach { it.drawBody(frameDelta, batch) }
|
||||
|
||||
// actorsRenderBehind?.forEach { it.drawBody(frameDelta, batch) }
|
||||
setCameraPosition(0f, 0f)
|
||||
batch.drawFlipped(fboRGBactorsBehind.colorBufferTexture, 0f, 0f)
|
||||
|
||||
moveCameraToWorldCoord()
|
||||
particlesContainer?.forEach { it.drawBody(frameDelta, batch) }
|
||||
}
|
||||
|
||||
@@ -522,8 +556,12 @@ object IngameRenderer : Disposable {
|
||||
/////////////////
|
||||
// draw actors //
|
||||
/////////////////
|
||||
// moveCameraToWorldCoord()
|
||||
// actorsRenderMiddle?.forEach { it.drawBody(frameDelta, batch) }
|
||||
setCameraPosition(0f, 0f)
|
||||
batch.drawFlipped(fboRGBactorsMiddle.colorBufferTexture, 0f, 0f)
|
||||
|
||||
moveCameraToWorldCoord()
|
||||
actorsRenderMiddle?.forEach { it.drawBody(frameDelta, batch) }
|
||||
actorsRenderMidTop?.forEach { it.drawBody(frameDelta, batch) }
|
||||
player?.drawBody(frameDelta, batch)
|
||||
actorsRenderFront?.forEach { it.drawBody(frameDelta, batch) }
|
||||
@@ -1210,6 +1248,8 @@ object IngameRenderer : Disposable {
|
||||
fboA_lightMixed = Float16FrameBuffer(width, height, false)
|
||||
fboEmissive = Float16FrameBuffer(width, height, false)
|
||||
fboMixedOut = Float16FrameBuffer(width, height, false)
|
||||
fboRGBactorsBehind = Float16FrameBuffer(width, height, false)
|
||||
fboRGBactorsMiddle = Float16FrameBuffer(width, height, false)
|
||||
lightmapFbo = Float16FrameBuffer(
|
||||
LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
@@ -1272,6 +1312,8 @@ object IngameRenderer : Disposable {
|
||||
if (::fboEmissive.isInitialized) fboEmissive.tryDispose()
|
||||
if (::fboMixedOut.isInitialized) fboMixedOut.tryDispose()
|
||||
if (::lightmapFbo.isInitialized) lightmapFbo.tryDispose()
|
||||
if (::fboRGBactorsBehind.isInitialized) fboRGBactorsBehind.tryDispose()
|
||||
if (::fboRGBactorsMiddle.isInitialized) fboRGBactorsMiddle.tryDispose()
|
||||
|
||||
blurtex0.tryDispose()
|
||||
|
||||
|
||||
@@ -102,6 +102,16 @@ internal object ExportFBO : ConsoleCommand {
|
||||
fun fboemissive(): FrameBuffer {
|
||||
return IngameRenderer.extortField<Float16FrameBuffer>("fboEmissive")!!
|
||||
}
|
||||
|
||||
@ExportFBOCmd("Framebuffer for render-behind actors used for creating shallow shadow effects")
|
||||
fun fboergbactorsbehind(): FrameBuffer {
|
||||
return IngameRenderer.extortField<Float16FrameBuffer>("fboRGBactorsBehind")!!
|
||||
}
|
||||
|
||||
@ExportFBOCmd("Framebuffer for render-middle actors used for creating large shadow effects")
|
||||
fun fboergbactorsmiddle(): FrameBuffer {
|
||||
return IngameRenderer.extortField<Float16FrameBuffer>("fboRGBactorsMiddle")!!
|
||||
}
|
||||
}
|
||||
|
||||
internal annotation class ExportFBOCmd(val description: String)
|
||||
Reference in New Issue
Block a user