mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
shader preloading
This commit is contained in:
@@ -590,6 +590,8 @@ public class App implements ApplicationListener {
|
|||||||
gl40capable = (Gdx.graphics.getGLVersion().getMajorVersion() >= 4);
|
gl40capable = (Gdx.graphics.getGLVersion().getMajorVersion() >= 4);
|
||||||
printdbg(this, "GL40 capable? "+gl40capable);
|
printdbg(this, "GL40 capable? "+gl40capable);
|
||||||
|
|
||||||
|
ShaderMgr.INSTANCE.compile(Gdx.files.classpath("shaders/shaders.csv"));
|
||||||
|
|
||||||
CommonResourcePool.INSTANCE.addToLoadingList("title_health1", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_take_a_break.tga")));
|
CommonResourcePool.INSTANCE.addToLoadingList("title_health1", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_take_a_break.tga")));
|
||||||
CommonResourcePool.INSTANCE.addToLoadingList("title_health2", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_distance.tga")));
|
CommonResourcePool.INSTANCE.addToLoadingList("title_health2", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_distance.tga")));
|
||||||
CommonResourcePool.INSTANCE.addToLoadingList("sound:haptic_bup", () -> new MusicContainer("haptic_bup", Gdx.files.internal("./assets/audio/effects/haptic_bup.ogg").file(), false, true, (AudioBank m) -> { return null; }));
|
CommonResourcePool.INSTANCE.addToLoadingList("sound:haptic_bup", () -> new MusicContainer("haptic_bup", Gdx.files.internal("./assets/audio/effects/haptic_bup.ogg").file(), false, true, (AudioBank m) -> { return null; }));
|
||||||
@@ -1002,6 +1004,7 @@ public class App implements ApplicationListener {
|
|||||||
shaderGhastlyWhite.dispose();
|
shaderGhastlyWhite.dispose();
|
||||||
hq2x.dispose();
|
hq2x.dispose();
|
||||||
|
|
||||||
|
ShaderMgr.INSTANCE.dispose();
|
||||||
CommonResourcePool.INSTANCE.dispose();
|
CommonResourcePool.INSTANCE.dispose();
|
||||||
fullscreenQuad.dispose();
|
fullscreenQuad.dispose();
|
||||||
logoBatch.dispose();
|
logoBatch.dispose();
|
||||||
|
|||||||
38
src/net/torvald/terrarum/ShaderMgr.kt
Normal file
38
src/net/torvald/terrarum/ShaderMgr.kt
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package net.torvald.terrarum
|
||||||
|
|
||||||
|
import com.badlogic.gdx.files.FileHandle
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShaderProgram
|
||||||
|
import com.badlogic.gdx.utils.Disposable
|
||||||
|
import net.torvald.terrarum.utils.CSVFetcher
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `default`, `default-batch`, and `default-shaperenderer` is pre-allocated. `default` is identical to `default-batch`.
|
||||||
|
*
|
||||||
|
* Created by minjaesong on 2024-12-16.
|
||||||
|
*/
|
||||||
|
object ShaderMgr : Disposable {
|
||||||
|
|
||||||
|
private val mapping = HashMap<String, ShaderProgram>()
|
||||||
|
|
||||||
|
fun compile(path: FileHandle) {
|
||||||
|
CSVFetcher.readFromString(path.readString("utf-8")).forEach {
|
||||||
|
val vert = it["vert"]
|
||||||
|
val frag = it["frag"]
|
||||||
|
val name = it["name"]
|
||||||
|
|
||||||
|
mapping[name] = App.loadShaderFromClasspath("shaders/$vert", "shaders/$frag")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mapping["default"] = DefaultGL32Shaders.createSpriteBatchShader()
|
||||||
|
mapping["default-batch"] = DefaultGL32Shaders.createSpriteBatchShader()
|
||||||
|
mapping["default-shaperenderer"] = DefaultGL32Shaders.createShapeRendererShader()
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun get(name: String): ShaderProgram = mapping[name]!!
|
||||||
|
|
||||||
|
override fun dispose() {
|
||||||
|
mapping.values.forEach { it.dispose() }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -52,8 +52,8 @@ object TerrarumPostProcessor : Disposable {
|
|||||||
|
|
||||||
private val batteryTex = TextureRegionPack(Gdx.files.internal("assets/graphics/gui/fullscreen_bat_ind.tga"), 23, 14)
|
private val batteryTex = TextureRegionPack(Gdx.files.internal("assets/graphics/gui/fullscreen_bat_ind.tga"), 23, 14)
|
||||||
|
|
||||||
private val shaderPostDither = App.loadShaderFromClasspath("shaders/default.vert", "shaders/postproc_dither.frag")
|
private val shaderPostDither = ShaderMgr["postDither"]
|
||||||
private val shaderPostNoDither = App.loadShaderFromClasspath("shaders/default.vert", "shaders/postproc_nodither.frag")
|
private val shaderPostNoDither = ShaderMgr["postNoDither"]
|
||||||
|
|
||||||
private val recommendRatio = 1.5f
|
private val recommendRatio = 1.5f
|
||||||
|
|
||||||
@@ -83,8 +83,6 @@ object TerrarumPostProcessor : Disposable {
|
|||||||
batch.dispose()
|
batch.dispose()
|
||||||
shapeRenderer.dispose()
|
shapeRenderer.dispose()
|
||||||
functionRowHelper.dispose()
|
functionRowHelper.dispose()
|
||||||
shaderPostDither.dispose()
|
|
||||||
shaderPostNoDither.dispose()
|
|
||||||
if (::lutTex.isInitialized) lutTex.tryDispose()
|
if (::lutTex.isInitialized) lutTex.tryDispose()
|
||||||
if (::outFBO.isInitialized) outFBO.dispose()
|
if (::outFBO.isInitialized) outFBO.dispose()
|
||||||
// testfill.dispose()
|
// testfill.dispose()
|
||||||
|
|||||||
@@ -154,24 +154,24 @@ object IngameRenderer : Disposable {
|
|||||||
// these codes will run regardless of the invocation of the "initialise()" function
|
// these codes will run regardless of the invocation of the "initialise()" function
|
||||||
// the "initialise()" function will also be called
|
// the "initialise()" function will also be called
|
||||||
init {
|
init {
|
||||||
shaderBlur = App.loadShaderFromClasspath("shaders/blur.vert", "shaders/blur.frag")
|
shaderBlur = ShaderMgr["irBlur"]
|
||||||
shaderRGBOnly = App.loadShaderFromClasspath("shaders/default.vert", "shaders/rgbonly.frag")
|
shaderRGBOnly = ShaderMgr["irRGBOnly"]
|
||||||
shaderAtoGrey = App.loadShaderFromClasspath("shaders/default.vert", "shaders/aonly.frag")
|
shaderAtoGrey = ShaderMgr["irAtoGrey"]
|
||||||
|
|
||||||
|
|
||||||
shaderForActors = App.loadShaderFromClasspath("shaders/default.vert", "shaders/actors.frag")
|
shaderForActors = ShaderMgr["irForActors"]
|
||||||
shaderShadowShallow = App.loadShaderFromClasspath("shaders/default.vert", "shaders/shadowshallow.frag")
|
shaderShadowShallow = ShaderMgr["irShadowShallow"]
|
||||||
shaderShadowDeep = App.loadShaderFromClasspath("shaders/default.vert", "shaders/shadowdeep.frag")
|
shaderShadowDeep = ShaderMgr["irShadowDeep"]
|
||||||
shaderBlendGlow = App.loadShaderFromClasspath("shaders/blendGlow.vert", "shaders/blendGlow.frag")
|
shaderBlendGlow = ShaderMgr["irBlendGlow"]
|
||||||
shaderBlendGlowTex1Flip = App.loadShaderFromClasspath("shaders/blendGlow.vert", "shaders/blendGlowTex1Flip.frag")
|
shaderBlendGlowTex1Flip = ShaderMgr["irBlendGlowTex1Flip"]
|
||||||
shaderDemultiply = App.loadShaderFromClasspath("shaders/blendGlow.vert", "shaders/demultiply.frag")
|
shaderDemultiply = ShaderMgr["irDemultiply"]
|
||||||
|
|
||||||
shaderBayerAlpha = App.loadShaderFromClasspath("shaders/default.vert", "shaders/alphadither.frag")
|
shaderBayerAlpha = ShaderMgr["irBayerAlpha"]
|
||||||
|
|
||||||
shaderKawaseDown = App.loadShaderFromClasspath("shaders/default.vert", "shaders/kawasedown.frag")
|
shaderKawaseDown = ShaderMgr["irKawaseDown"]
|
||||||
shaderKawaseUp = App.loadShaderFromClasspath("shaders/default.vert", "shaders/kawaseup.frag")
|
shaderKawaseUp = ShaderMgr["irKawaseUp"]
|
||||||
|
|
||||||
shaderVibrancy = App.loadShaderFromClasspath("shaders/default.vert", "shaders/vibrancy.frag")
|
shaderVibrancy = ShaderMgr["irVibrancy"]
|
||||||
|
|
||||||
if (!shaderBlendGlow.isCompiled) {
|
if (!shaderBlendGlow.isCompiled) {
|
||||||
Gdx.app.log("shaderBlendGlow", shaderBlendGlow.log)
|
Gdx.app.log("shaderBlendGlow", shaderBlendGlow.log)
|
||||||
@@ -1403,26 +1403,6 @@ object IngameRenderer : Disposable {
|
|||||||
WeatherMixer.dispose()
|
WeatherMixer.dispose()
|
||||||
|
|
||||||
if (::batch.isInitialized) batch.tryDispose()
|
if (::batch.isInitialized) batch.tryDispose()
|
||||||
|
|
||||||
|
|
||||||
shaderBlur.dispose()
|
|
||||||
shaderRGBOnly.dispose()
|
|
||||||
shaderAtoGrey.dispose()
|
|
||||||
|
|
||||||
shaderKawaseDown.dispose()
|
|
||||||
shaderKawaseUp.dispose()
|
|
||||||
|
|
||||||
shaderBlendGlow.dispose()
|
|
||||||
shaderBlendGlowTex1Flip.dispose()
|
|
||||||
shaderForActors.dispose()
|
|
||||||
shaderShadowShallow.dispose()
|
|
||||||
shaderShadowDeep.dispose()
|
|
||||||
shaderDemultiply.dispose()
|
|
||||||
|
|
||||||
shaderBayerAlpha.dispose()
|
|
||||||
|
|
||||||
shaderVibrancy.dispose()
|
|
||||||
|
|
||||||
if (::fboRGBexport.isInitialized) fboRGBexport.tryDispose()
|
if (::fboRGBexport.isInitialized) fboRGBexport.tryDispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
|||||||
import com.badlogic.gdx.graphics.glutils.Float16FrameBuffer
|
import com.badlogic.gdx.graphics.glutils.Float16FrameBuffer
|
||||||
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
||||||
import com.jme3.math.FastMath
|
import com.jme3.math.FastMath
|
||||||
import net.torvald.terrarum.App
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.ceilToInt
|
|
||||||
import net.torvald.terrarum.gdxClearAndEnableBlend
|
|
||||||
import net.torvald.terrarum.inAction
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2024-11-23.
|
* Created by minjaesong on 2024-11-23.
|
||||||
@@ -84,9 +81,9 @@ object BlurMgr {
|
|||||||
private lateinit var blurtex2: Texture
|
private lateinit var blurtex2: Texture
|
||||||
private lateinit var blurtex3: Texture
|
private lateinit var blurtex3: Texture
|
||||||
|
|
||||||
private val shaderKawaseDown = App.loadShaderFromClasspath("shaders/default.vert", "shaders/kawasedown.frag")
|
private val shaderKawaseDown = ShaderMgr["irKawaseDown"]
|
||||||
private val shaderKawaseUp = App.loadShaderFromClasspath("shaders/default.vert", "shaders/kawaseup.frag")
|
private val shaderKawaseUp = ShaderMgr["irKawaseUp"]
|
||||||
private val shaderGauss3 = App.loadShaderFromClasspath("shaders/default.vert", "shaders/gaussian3x3.frag")
|
private val shaderGauss3 = ShaderMgr["gaus3"]
|
||||||
|
|
||||||
fun makeBlur(`in`: FrameBuffer, out: FrameBuffer, strength: Float) {
|
fun makeBlur(`in`: FrameBuffer, out: FrameBuffer, strength: Float) {
|
||||||
assert(`in`.width == out.width && `in`.height == out.height) {
|
assert(`in`.width == out.width && `in`.height == out.height) {
|
||||||
@@ -198,9 +195,6 @@ object BlurMgr {
|
|||||||
|
|
||||||
fun dispose() {
|
fun dispose() {
|
||||||
fboDict.values.forEach { it.dispose() }
|
fboDict.values.forEach { it.dispose() }
|
||||||
shaderKawaseUp.dispose()
|
|
||||||
shaderKawaseDown.dispose()
|
|
||||||
shaderGauss3.dispose()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -184,8 +184,8 @@ object Toolkit : Disposable {
|
|||||||
|
|
||||||
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it
|
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it
|
||||||
|
|
||||||
batch.begin()
|
|
||||||
batch.shader = null
|
batch.shader = null
|
||||||
|
batch.begin()
|
||||||
(batch as FlippingSpriteBatch).drawFlipped(fboBlur.colorBufferTexture, x.toFloat(), y.toFloat())
|
(batch as FlippingSpriteBatch).drawFlipped(fboBlur.colorBufferTexture, x.toFloat(), y.toFloat())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,9 +102,8 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
it.texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat)
|
it.texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val shaderAstrum =
|
private val shaderAstrum = ShaderMgr["astrum"]
|
||||||
App.loadShaderFromClasspath("shaders/blendSkyboxStars.vert", "shaders/blendSkyboxStars.frag")
|
private val shaderClouds = ShaderMgr["clouds"]
|
||||||
private val shaderClouds = App.loadShaderFromClasspath("shaders/default.vert", "shaders/clouds.frag")
|
|
||||||
|
|
||||||
private var astrumOffX = 0f
|
private var astrumOffX = 0f
|
||||||
private var astrumOffY = 0f
|
private var astrumOffY = 0f
|
||||||
@@ -891,8 +890,6 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
|
|
||||||
fun dispose() {
|
fun dispose() {
|
||||||
starmapTex.texture.dispose()
|
starmapTex.texture.dispose()
|
||||||
shaderAstrum.dispose()
|
|
||||||
shaderClouds.dispose()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Cvec.linearise(): Cvec {
|
private fun Cvec.linearise(): Cvec {
|
||||||
|
|||||||
@@ -110,8 +110,8 @@ internal object BlocksDrawer {
|
|||||||
private var nullBuffer: Pixmap = Pixmap(1, 1, Pixmap.Format.RGBA8888)
|
private var nullBuffer: Pixmap = Pixmap(1, 1, Pixmap.Format.RGBA8888)
|
||||||
|
|
||||||
private lateinit var tilesQuad: Mesh
|
private lateinit var tilesQuad: Mesh
|
||||||
private val shaderTiling = App.loadShaderFromClasspath("shaders/default.vert", "shaders/tiling.frag")
|
private val shaderTiling = ShaderMgr["tiling"]
|
||||||
private val shaderDeblock = App.loadShaderFromClasspath("shaders/default.vert", "shaders/deblocking.frag")
|
private val shaderDeblock = ShaderMgr["deblock"]
|
||||||
|
|
||||||
private lateinit var deblockingFBO: Float16FrameBuffer
|
private lateinit var deblockingFBO: Float16FrameBuffer
|
||||||
private lateinit var blurmapFBO: Float16FrameBuffer
|
private lateinit var blurmapFBO: Float16FrameBuffer
|
||||||
@@ -1493,8 +1493,6 @@ internal object BlocksDrawer {
|
|||||||
_tilesBufferAsTex2.dispose()
|
_tilesBufferAsTex2.dispose()
|
||||||
// _blurTilesBuffer.dispose()
|
// _blurTilesBuffer.dispose()
|
||||||
tilesQuad.tryDispose()
|
tilesQuad.tryDispose()
|
||||||
shaderTiling.dispose()
|
|
||||||
shaderDeblock.dispose()
|
|
||||||
nullTex.dispose()
|
nullTex.dispose()
|
||||||
nullBuffer.dispose()
|
nullBuffer.dispose()
|
||||||
|
|
||||||
|
|||||||
27
src/shaders/shaders.csv
Normal file
27
src/shaders/shaders.csv
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
name;frag;vert;comment
|
||||||
|
|
||||||
|
astrum;blendSkyboxStars.frag;blendSkyboxStars.vert;WeatherMixer
|
||||||
|
clouds;clouds.frag;default.vert;WeatherMixer
|
||||||
|
|
||||||
|
tiling;tiling.frag;default.vert;BlocksDrawer
|
||||||
|
deblock;deblocking.frag;default.vert;BlocksDrawer
|
||||||
|
|
||||||
|
postDither;postproc_dither.frag;default.vert;TerrarumPostProcessor
|
||||||
|
postNoDither;postproc_nodither.frag;default.vert;TerrarumPostProcessor
|
||||||
|
|
||||||
|
irBlur;blur.frag;blur.vert;IngameRenderer
|
||||||
|
irRGBOnly;rgbonly.frag;default.vert;IngameRenderer
|
||||||
|
irAtoGrey;aonly.frag;default.vert;IngameRenderer
|
||||||
|
irForActors;actors.frag;default.vert;IngameRenderer
|
||||||
|
irShadowShallow;shadowshallow.frag;default.vert;IngameRenderer
|
||||||
|
irShadowDeep;shadowdeep.frag;default.vert;IngameRenderer
|
||||||
|
irBlendGlow;blendGlow.frag;default.vert;IngameRenderer
|
||||||
|
irBlendGlowTex1Flip;blendGlowTex1Flip.frag;default.vert;IngameRenderer
|
||||||
|
irDemultiply;demultiply.frag;default.vert;IngameRenderer
|
||||||
|
irBayerAlpha;alphadither.frag;default.vert;IngameRenderer
|
||||||
|
irKawaseDown;kawasedown.frag;default.vert;IngameRenderer
|
||||||
|
irKawaseUp;kawaseup.frag;default.vert;IngameRenderer
|
||||||
|
irVibrancy;vibrancy.frag;default.vert;IngameRenderer
|
||||||
|
|
||||||
|
gaus3;gaussian3x3.frag;default.vert;BlurMgr
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user