mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
lightmap blurring simplified
This commit is contained in:
@@ -45,7 +45,7 @@ Veuillez reconfigurer votre ordre de chargement sur :
|
||||
|
||||
private val maxtw = wot.maxOf { App.fontGameFBO.getWidth(it) }
|
||||
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, App.scr.width, App.scr.height, true)
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, App.scr.width, App.scr.height, false)
|
||||
|
||||
private var init = false
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
||||
App.fontGame.getWidth(Lang["ERROR_GENERIC_TEXT"])
|
||||
),
|
||||
App.fontGame.lineHeight.toInt(),
|
||||
true
|
||||
false
|
||||
)
|
||||
|
||||
arrowObjTex = Texture(Gdx.files.internal("assets/graphics/test_loading_arrow_atlas.tga"))
|
||||
|
||||
@@ -125,7 +125,7 @@ object IME {
|
||||
if (langCode.isNotEmpty()) {
|
||||
printdbg(this, "Icon order #${(k+1) / 20} - icons[\"$langCode\"] = iconSheet.get(1, ${k/20})")
|
||||
iconSheet.get(1, k / 20).let {
|
||||
it.flip(false, true)
|
||||
it.flip(false, false)
|
||||
icons["$langCode"] = it
|
||||
}
|
||||
|
||||
|
||||
@@ -48,10 +48,9 @@ object IngameRenderer : Disposable {
|
||||
|
||||
private lateinit var blurWriteQuad: Mesh
|
||||
private lateinit var blurWriteQuad2: Mesh
|
||||
private lateinit var blurWriteQuad4: Mesh
|
||||
// private lateinit var blurWriteQuad4: Mesh
|
||||
|
||||
private lateinit var lightmapFboA: FloatFrameBuffer
|
||||
private lateinit var lightmapFboB: FloatFrameBuffer
|
||||
private lateinit var lightmapFbo: FloatFrameBuffer
|
||||
private lateinit var fboRGB: FloatFrameBuffer
|
||||
private lateinit var fboRGB_lightMixed: FloatFrameBuffer
|
||||
private lateinit var fboA: FloatFrameBuffer
|
||||
@@ -64,7 +63,7 @@ object IngameRenderer : Disposable {
|
||||
private lateinit var blurTex: TextureRegion
|
||||
|
||||
private lateinit var fboBlurHalf: FloatFrameBuffer
|
||||
private lateinit var fboBlurQuarter: FloatFrameBuffer
|
||||
// private lateinit var fboBlurQuarter: FloatFrameBuffer
|
||||
|
||||
// you must have lightMixed FBO; otherwise you'll be reading from unbaked FBO and it freaks out GPU
|
||||
|
||||
@@ -398,17 +397,13 @@ object IngameRenderer : Disposable {
|
||||
|
||||
|
||||
private fun prepLightmapRGBA() {
|
||||
lightmapFboA.inAction(null, null) {
|
||||
clearBuffer()
|
||||
Gdx.gl.glDisable(GL20.GL_BLEND)
|
||||
}
|
||||
lightmapFboB.inAction(null, null) {
|
||||
lightmapFbo.inAction(null, null) {
|
||||
clearBuffer()
|
||||
Gdx.gl.glDisable(GL20.GL_BLEND)
|
||||
}
|
||||
|
||||
// processBlur(lightmapFboA, lightmapFboB)
|
||||
processKawaseBlur(lightmapFboB)
|
||||
processKawaseBlur(lightmapFbo)
|
||||
// processNoBlur()
|
||||
|
||||
|
||||
@@ -660,19 +655,20 @@ object IngameRenderer : Disposable {
|
||||
batch.projectionMatrix = camera.combined
|
||||
}
|
||||
|
||||
private const val KAWASE_POWER = 0.667f
|
||||
|
||||
private var blurtex0 = Texture(16, 16, Pixmap.Format.RGBA8888)
|
||||
private var blurtex1 = Texture(16, 16, Pixmap.Format.RGBA8888)
|
||||
private var blurtex2 = Texture(16, 16, Pixmap.Format.RGBA8888)
|
||||
private var blurtex3 = Texture(16, 16, Pixmap.Format.RGBA8888)
|
||||
private var blurtex4 = Texture(16, 16, Pixmap.Format.RGBA8888)
|
||||
private lateinit var blurtex1: Texture
|
||||
private lateinit var blurtex2: Texture
|
||||
private lateinit var blurtex3: Texture
|
||||
private lateinit var blurtex4: Texture
|
||||
|
||||
private const val KAWASE_POWER = 1.5f
|
||||
|
||||
fun processKawaseBlur(outFbo: FloatFrameBuffer) {
|
||||
|
||||
blurtex0.dispose()
|
||||
|
||||
|
||||
// initialise readBuffer with untreated lightmap
|
||||
outFbo.inAction(camera, batch) {
|
||||
blurtex0 = LightmapRenderer.draw()
|
||||
@@ -695,7 +691,7 @@ object IngameRenderer : Disposable {
|
||||
blurWriteQuad2.render(shaderKawaseDown, GL20.GL_TRIANGLES)
|
||||
}
|
||||
|
||||
fboBlurQuarter.inAction(camera, batch) {
|
||||
/*fboBlurQuarter.inAction(camera, batch) {
|
||||
blurtex2 = fboBlurHalf.colorBufferTexture
|
||||
blurtex2.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
||||
blurtex2.bind(0)
|
||||
@@ -715,11 +711,11 @@ object IngameRenderer : Disposable {
|
||||
shaderKawaseUp.setUniformi("u_texture", 0)
|
||||
shaderKawaseUp.setUniformf("halfpixel", KAWASE_POWER / fboBlurQuarter.width, KAWASE_POWER / fboBlurQuarter.height)
|
||||
blurWriteQuad2.render(shaderKawaseUp, GL20.GL_TRIANGLES)
|
||||
}
|
||||
}*/
|
||||
|
||||
// TODO apply dithering on this specific draw call
|
||||
outFbo.inAction(camera, batch) {
|
||||
blurtex4 = fboBlurHalf.colorBufferTexture
|
||||
blurtex4.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
||||
blurtex4.bind(0)
|
||||
shaderKawaseUp.bind()
|
||||
shaderKawaseUp.setUniformMatrix("u_projTrans", camera.combined)
|
||||
@@ -746,12 +742,12 @@ object IngameRenderer : Disposable {
|
||||
VertexAttribute.ColorUnpacked(),
|
||||
VertexAttribute.TexCoords(0)
|
||||
)
|
||||
blurWriteQuad4 = Mesh(
|
||||
/*blurWriteQuad4 = Mesh(
|
||||
true, 4, 6,
|
||||
VertexAttribute.Position(),
|
||||
VertexAttribute.ColorUnpacked(),
|
||||
VertexAttribute.TexCoords(0)
|
||||
)
|
||||
)*/
|
||||
init = true
|
||||
}
|
||||
else {
|
||||
@@ -759,45 +755,39 @@ object IngameRenderer : Disposable {
|
||||
fboRGB_lightMixed.dispose()
|
||||
fboA.dispose()
|
||||
fboA_lightMixed.dispose()
|
||||
lightmapFboA.dispose()
|
||||
lightmapFboB.dispose()
|
||||
lightmapFbo.dispose()
|
||||
|
||||
fboBlurHalf.dispose()
|
||||
fboBlurQuarter.dispose()
|
||||
//fboBlurQuarter.dispose()
|
||||
}
|
||||
|
||||
fboRGB = FloatFrameBuffer(width, height, true)
|
||||
fboRGB_lightMixed = FloatFrameBuffer(width, height, true)
|
||||
fboA = FloatFrameBuffer(width, height, true)
|
||||
fboA_lightMixed = FloatFrameBuffer(width, height, true)
|
||||
fboMixedOut = FloatFrameBuffer(width, height, true)
|
||||
lightmapFboA = FloatFrameBuffer(
|
||||
fboRGB = FloatFrameBuffer(width, height, false)
|
||||
fboRGB_lightMixed = FloatFrameBuffer(width, height, false)
|
||||
fboA = FloatFrameBuffer(width, height, false)
|
||||
fboA_lightMixed = FloatFrameBuffer(width, height, false)
|
||||
fboMixedOut = FloatFrameBuffer(width, height, false)
|
||||
lightmapFbo = FloatFrameBuffer(
|
||||
LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
true
|
||||
)
|
||||
lightmapFboB = FloatFrameBuffer(
|
||||
LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(),
|
||||
true
|
||||
false
|
||||
)
|
||||
rgbTex = TextureRegion(fboRGB_lightMixed.colorBufferTexture)
|
||||
aTex = TextureRegion(fboA_lightMixed.colorBufferTexture)
|
||||
lightTex = TextureRegion(lightmapFboB.colorBufferTexture)
|
||||
lightTex = TextureRegion(lightmapFbo.colorBufferTexture)
|
||||
blurTex = TextureRegion()
|
||||
mixedOutTex = TextureRegion(fboMixedOut.colorBufferTexture)
|
||||
|
||||
fboBlurHalf = FloatFrameBuffer(
|
||||
LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt() / 2,
|
||||
LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt() / 2,
|
||||
true
|
||||
false
|
||||
)
|
||||
|
||||
fboBlurQuarter = FloatFrameBuffer(
|
||||
/*fboBlurQuarter = FloatFrameBuffer(
|
||||
LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt() / 4,
|
||||
LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt() / 4,
|
||||
true
|
||||
)
|
||||
false
|
||||
)*/
|
||||
|
||||
BlocksDrawer.resize(width, height)
|
||||
LightmapRenderer.resize(width, height)
|
||||
@@ -805,47 +795,42 @@ object IngameRenderer : Disposable {
|
||||
|
||||
blurWriteQuad.setVertices(floatArrayOf(
|
||||
0f,0f,0f, 1f,1f,1f,1f, 0f,1f,
|
||||
lightmapFboA.width.toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFboA.width.toFloat(),lightmapFboA.height.toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFboA.height.toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
lightmapFbo.width.toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFbo.width.toFloat(),lightmapFbo.height.toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFbo.height.toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
blurWriteQuad.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))
|
||||
|
||||
blurWriteQuad2.setVertices(floatArrayOf(
|
||||
0f,0f,0f, 1f,1f,1f,1f, 0f,1f,
|
||||
lightmapFboA.width.div(2).toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFboA.width.div(2).toFloat(),lightmapFboA.height.div(2).toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFboA.height.div(2).toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
lightmapFbo.width.div(2).toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFbo.width.div(2).toFloat(),lightmapFbo.height.div(2).toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFbo.height.div(2).toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
blurWriteQuad2.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))
|
||||
|
||||
blurWriteQuad4.setVertices(floatArrayOf(
|
||||
/*blurWriteQuad4.setVertices(floatArrayOf(
|
||||
0f,0f,0f, 1f,1f,1f,1f, 0f,1f,
|
||||
lightmapFboA.width.div(4).toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFboA.width.div(4).toFloat(),lightmapFboA.height.div(4).toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFboA.height.div(4).toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
blurWriteQuad4.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))
|
||||
lightmapFbo.width.div(4).toFloat(),0f,0f, 1f,1f,1f,1f, 1f,1f,
|
||||
lightmapFbo.width.div(4).toFloat(),lightmapFbo.height.div(4).toFloat(),0f, 1f,1f,1f,1f, 1f,0f,
|
||||
0f,lightmapFbo.height.div(4).toFloat(),0f, 1f,1f,1f,1f, 0f,0f))
|
||||
blurWriteQuad4.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))*/
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
blurWriteQuad.dispose()
|
||||
blurWriteQuad2.dispose()
|
||||
blurWriteQuad4.dispose()
|
||||
//blurWriteQuad4.dispose()
|
||||
|
||||
fboRGB.dispose()
|
||||
fboA.dispose()
|
||||
fboRGB_lightMixed.dispose()
|
||||
fboA_lightMixed.dispose()
|
||||
fboMixedOut.dispose()
|
||||
lightmapFboA.dispose()
|
||||
lightmapFboB.dispose()
|
||||
lightmapFbo.dispose()
|
||||
|
||||
try { blurtex0.dispose() } catch (e: GdxRuntimeException) {}
|
||||
// try { blurtex1.dispose() } catch (e: GdxRuntimeException) {}
|
||||
// try { blurtex2.dispose() } catch (e: GdxRuntimeException) {}
|
||||
// try { blurtex3.dispose() } catch (e: GdxRuntimeException) {}
|
||||
// try { blurtex4.dispose() } catch (e: GdxRuntimeException) {}
|
||||
|
||||
fboBlurHalf.dispose()
|
||||
fboBlurQuarter.dispose()
|
||||
//fboBlurQuarter.dispose()
|
||||
|
||||
LightmapRenderer.dispose()
|
||||
BlocksDrawer.dispose()
|
||||
|
||||
@@ -29,7 +29,6 @@ import net.torvald.terrarum.ui.Movement
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItem
|
||||
import net.torvald.terrarum.utils.RandomWordsName
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
import java.time.Instant
|
||||
import java.time.format.DateTimeFormatter
|
||||
@@ -137,7 +136,7 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() {
|
||||
private var scrollAnimCounter = 0f
|
||||
private val scrollAnimLen = 0.1f
|
||||
|
||||
private var sliderFBO = FrameBuffer(Pixmap.Format.RGBA8888, uiWidth + 10, height, true)
|
||||
private var sliderFBO = FrameBuffer(Pixmap.Format.RGBA8888, uiWidth + 10, height, false)
|
||||
|
||||
private var showSpinner = false
|
||||
|
||||
@@ -450,7 +449,7 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() {
|
||||
uiScroll = 0f
|
||||
|
||||
sliderFBO.dispose()
|
||||
sliderFBO = FrameBuffer(Pixmap.Format.RGBA8888, uiWidth + 10, height, true)
|
||||
sliderFBO = FrameBuffer(Pixmap.Format.RGBA8888, uiWidth + 10, height, false)
|
||||
}
|
||||
|
||||
private fun setCameraPosition(batch: SpriteBatch, camera: Camera, newX: Float, newY: Float) {
|
||||
|
||||
@@ -298,17 +298,17 @@ object Toolkit : Disposable {
|
||||
fboBlur = FloatFrameBuffer(
|
||||
fw,
|
||||
fh,
|
||||
true
|
||||
false
|
||||
)
|
||||
fboBlurHalf = FloatFrameBuffer(
|
||||
fw / 2,
|
||||
fh / 2,
|
||||
true
|
||||
false
|
||||
)
|
||||
fboBlurQuarter = FloatFrameBuffer(
|
||||
fw / 4,
|
||||
fh / 4,
|
||||
true
|
||||
false
|
||||
)
|
||||
|
||||
blurWriteQuad.setVertices(floatArrayOf(
|
||||
|
||||
@@ -36,7 +36,7 @@ class UIItemSpinner(
|
||||
override val height = 24
|
||||
private val buttonW = 30
|
||||
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, true)
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, false)
|
||||
|
||||
var value = initialValue.coerceIn(min, max)
|
||||
private var fboUpdateLatch = true
|
||||
|
||||
@@ -99,7 +99,7 @@ class UIItemTextLineInput(
|
||||
Pixmap.Format.RGBA8888,
|
||||
width - 2 * UI_TEXT_MARGIN - 2 * (WIDTH_ONEBUTTON + 3),
|
||||
height - 2 * UI_TEXT_MARGIN,
|
||||
true
|
||||
false
|
||||
)
|
||||
|
||||
var isActive: Boolean = false // keep it false by default!
|
||||
@@ -283,7 +283,7 @@ class UIItemTextLineInput(
|
||||
else if (keycodes.containsSome(Input.Keys.ENTER, Input.Keys.NUMPAD_ENTER)) {
|
||||
endComposing()
|
||||
|
||||
println("END COMPOSING!!")
|
||||
// println("END COMPOSING!!")
|
||||
}
|
||||
// accept:
|
||||
// - literal "<"
|
||||
|
||||
@@ -44,7 +44,7 @@ class UIItemTextSelector(
|
||||
override val height = 24
|
||||
private val buttonW = 30
|
||||
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, true)
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, false)
|
||||
|
||||
var selection = initialSelection
|
||||
private var fboUpdateLatch = true
|
||||
|
||||
Reference in New Issue
Block a user