mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
prolonged alpha blending issue seemingly fixed?
at least it's partially fixed...
This commit is contained in:
@@ -4,8 +4,12 @@ import com.badlogic.gdx.Game
|
|||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplication
|
import com.badlogic.gdx.backends.lwjgl.LwjglApplication
|
||||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration
|
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration
|
||||||
import com.badlogic.gdx.graphics.*
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap
|
||||||
|
import com.badlogic.gdx.graphics.PixmapIO2
|
||||||
|
import com.badlogic.gdx.graphics.Texture
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
|
import net.torvald.terrarum.gdxClearAndSetBlend
|
||||||
import net.torvald.terrarum.inUse
|
import net.torvald.terrarum.inUse
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
import java.awt.Font
|
import java.awt.Font
|
||||||
@@ -272,11 +276,7 @@ class SpriteAssemblerPreview: Game() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Gdx.gl.glClearColor(.62f,.79f,1f,1f)
|
gdxClearAndSetBlend(.62f,.79f,1f,1f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_BLEND)
|
|
||||||
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
|
|
||||||
|
|
||||||
batch.inUse {
|
batch.inUse {
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ import java.io.IOException;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import static net.torvald.terrarum.TerrarumKt.gdxClearAndSetBlend;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The framework's Application Loader
|
* The framework's Application Loader
|
||||||
*
|
*
|
||||||
@@ -245,12 +247,7 @@ public class AppLoader implements ApplicationListener {
|
|||||||
|
|
||||||
|
|
||||||
FrameBufferManager.begin(renderFBO);
|
FrameBufferManager.begin(renderFBO);
|
||||||
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f);
|
gdxClearAndSetBlend(.094f, .094f, .094f, 0f);
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
|
||||||
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D);
|
|
||||||
Gdx.gl.glEnable(GL20.GL_BLEND);
|
|
||||||
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD);
|
|
||||||
FrameBufferManager.end();
|
FrameBufferManager.end();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package net.torvald.terrarum
|
|||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.Screen
|
import com.badlogic.gdx.Screen
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.graphics.GL20
|
|
||||||
import com.badlogic.gdx.graphics.OrthographicCamera
|
import com.badlogic.gdx.graphics.OrthographicCamera
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import net.torvald.terrarum.langpack.Lang
|
import net.torvald.terrarum.langpack.Lang
|
||||||
@@ -39,8 +38,7 @@ object ErrorDisp : Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun render(delta: Float) {
|
override fun render(delta: Float) {
|
||||||
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
|
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ package net.torvald.terrarum
|
|||||||
|
|
||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.ScreenAdapter
|
import com.badlogic.gdx.ScreenAdapter
|
||||||
import com.badlogic.gdx.graphics.*
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.graphics.OrthographicCamera
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap
|
||||||
|
import com.badlogic.gdx.graphics.Texture
|
||||||
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.dataclass.HistoryArray
|
import net.torvald.dataclass.HistoryArray
|
||||||
import net.torvald.terrarum.langpack.Lang
|
import net.torvald.terrarum.langpack.Lang
|
||||||
import net.torvald.terrarum.modulebasegame.Ingame
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2017-07-13.
|
* Created by minjaesong on 2017-07-13.
|
||||||
@@ -123,12 +125,10 @@ object LoadScreen : ScreenAdapter() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
|
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
|
|
||||||
textFbo.inAction(null, null) {
|
textFbo.inAction(null, null) {
|
||||||
Gdx.gl.glClearColor(0f, 0f, 0f, 0f)
|
gdxClearAndSetBlend(0f, 0f, 0f, 0f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update arrow object
|
// update arrow object
|
||||||
|
|||||||
@@ -39,11 +39,7 @@ object PostProcessor {
|
|||||||
|
|
||||||
AppLoader.debugTimers["Renderer.PostProcessor"] = measureNanoTime {
|
AppLoader.debugTimers["Renderer.PostProcessor"] = measureNanoTime {
|
||||||
|
|
||||||
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
|
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_BLEND)
|
|
||||||
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
|
|
||||||
val shader: ShaderProgram? =
|
val shader: ShaderProgram? =
|
||||||
if (AppLoader.getConfigBoolean("fxdither"))
|
if (AppLoader.getConfigBoolean("fxdither"))
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import net.torvald.terrarum.gameactors.Actor
|
|||||||
import net.torvald.terrarum.gameactors.ActorID
|
import net.torvald.terrarum.gameactors.ActorID
|
||||||
import net.torvald.terrarum.imagefont.TinyAlphNum
|
import net.torvald.terrarum.imagefont.TinyAlphNum
|
||||||
import net.torvald.terrarum.itemproperties.ItemCodex
|
import net.torvald.terrarum.itemproperties.ItemCodex
|
||||||
import net.torvald.terrarum.modulebasegame.Ingame
|
|
||||||
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
|
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
|
||||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||||
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
|
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
|
||||||
@@ -396,17 +395,17 @@ object Terrarum : Screen {
|
|||||||
|
|
||||||
|
|
||||||
// jump straight into the ingame
|
// jump straight into the ingame
|
||||||
val ingame = Ingame(batch)
|
/*val ingame = Ingame(batch)
|
||||||
ingame.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong())
|
ingame.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong())
|
||||||
ingame.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW
|
ingame.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW
|
||||||
LoadScreen.screenToLoad = ingame
|
LoadScreen.screenToLoad = ingame
|
||||||
this.ingame = ingame
|
this.ingame = ingame
|
||||||
setScreen(LoadScreen)
|
setScreen(LoadScreen)*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// title screen
|
// title screen
|
||||||
//AppLoader.getINSTANCE().setScreen(TitleScreen(batch))
|
AppLoader.getINSTANCE().setScreen(TitleScreen(batch))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setScreen(screen: Screen) {
|
fun setScreen(screen: Screen) {
|
||||||
@@ -598,7 +597,10 @@ fun blendMul(batch: SpriteBatch? = null) {
|
|||||||
fun blendNormal(batch: SpriteBatch? = null) {
|
fun blendNormal(batch: SpriteBatch? = null) {
|
||||||
(batch ?: Terrarum.batch).enableBlending()
|
(batch ?: Terrarum.batch).enableBlending()
|
||||||
(batch ?: Terrarum.batch).setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
(batch ?: Terrarum.batch).setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
||||||
|
|
||||||
|
// alpha must not be premultiplied
|
||||||
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD) // batch.flush does not touch blend equation
|
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD) // batch.flush does not touch blend equation
|
||||||
|
Gdx.gl.glBlendFuncSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_SRC_ALPHA, GL20.GL_ONE)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun blendScreen(batch: SpriteBatch? = null) {
|
fun blendScreen(batch: SpriteBatch? = null) {
|
||||||
@@ -611,6 +613,20 @@ fun blendDisable(batch: SpriteBatch? = null) {
|
|||||||
(batch ?: Terrarum.batch).disableBlending()
|
(batch ?: Terrarum.batch).disableBlending()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun gdxClearAndSetBlend(r: Float, g: Float, b: Float, a: Float) {
|
||||||
|
Gdx.gl.glClearColor(0f,0f,0f,0f)
|
||||||
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
||||||
|
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
|
||||||
|
Gdx.gl.glEnable(GL20.GL_BLEND)
|
||||||
|
|
||||||
|
// this assumens premultiplied alpha?
|
||||||
|
//Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
||||||
|
// alpha must not be premultiplied
|
||||||
|
|
||||||
|
Gdx.gl.glBlendFuncSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_SRC_ALPHA, GL20.GL_ONE)
|
||||||
|
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD)
|
||||||
|
}
|
||||||
|
|
||||||
object BlendMode {
|
object BlendMode {
|
||||||
const val SCREEN = "screen"
|
const val SCREEN = "screen"
|
||||||
const val MULTIPLY = "multiply"
|
const val MULTIPLY = "multiply"
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ package net.torvald.terrarum
|
|||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.InputAdapter
|
import com.badlogic.gdx.InputAdapter
|
||||||
import com.badlogic.gdx.Screen
|
import com.badlogic.gdx.Screen
|
||||||
import com.badlogic.gdx.graphics.*
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.graphics.OrthographicCamera
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap
|
||||||
|
import com.badlogic.gdx.graphics.Texture
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||||
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
||||||
@@ -241,8 +244,7 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
|
|||||||
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
|
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
|
||||||
|
|
||||||
// render world
|
// render world
|
||||||
Gdx.gl.glClearColor(.64f, .754f, .84f, 1f)
|
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
|
|
||||||
|
|
||||||
IngameRenderer.invoke(world = demoWorld, uisToDraw = uiContainer)
|
IngameRenderer.invoke(world = demoWorld, uisToDraw = uiContainer)
|
||||||
|
|||||||
@@ -251,22 +251,6 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
|
|||||||
|
|
||||||
|
|
||||||
historicalFigureIDBucket = ArrayList<Int>()
|
historicalFigureIDBucket = ArrayList<Int>()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// add new player and put it to actorContainer
|
|
||||||
//playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid())
|
|
||||||
//playableActorDelegate = PlayableActorDelegate(PlayerBuilderTestSubject1())
|
|
||||||
//addNewActor(player)
|
|
||||||
|
|
||||||
|
|
||||||
// test actor
|
|
||||||
//addNewActor(PlayerBuilderCynthia())
|
|
||||||
|
|
||||||
|
|
||||||
// it won't work:
|
|
||||||
//setTheRealGamerFirstTime(PlayerBuilderSigrid())
|
|
||||||
// because NO GL CONTEXT IN THIS THREAD, might want 'postInit()'?
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import net.torvald.terrarum.gamecontroller.KeyToggler
|
|||||||
import net.torvald.terrarum.gameworld.fmod
|
import net.torvald.terrarum.gameworld.fmod
|
||||||
import net.torvald.terrarum.modulebasegame.gameactors.ParticleBase
|
import net.torvald.terrarum.modulebasegame.gameactors.ParticleBase
|
||||||
import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension
|
import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension
|
||||||
import net.torvald.terrarum.ui.UICanvas
|
|
||||||
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
|
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
|
||||||
|
import net.torvald.terrarum.ui.UICanvas
|
||||||
import net.torvald.terrarum.worlddrawer.BlocksDrawer
|
import net.torvald.terrarum.worlddrawer.BlocksDrawer
|
||||||
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
|
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
|
||||||
import net.torvald.terrarum.worlddrawer.LightmapRenderer
|
import net.torvald.terrarum.worlddrawer.LightmapRenderer
|
||||||
@@ -93,11 +93,7 @@ object IngameRenderer {
|
|||||||
|
|
||||||
// clear main or whatever super-FBO being used
|
// clear main or whatever super-FBO being used
|
||||||
//clearBuffer()
|
//clearBuffer()
|
||||||
Gdx.gl.glClearColor(.64f, .754f, .84f, 1f)
|
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_BLEND)
|
|
||||||
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@@ -321,8 +317,7 @@ object IngameRenderer {
|
|||||||
fboA.inAction(null, null) {
|
fboA.inAction(null, null) {
|
||||||
clearBuffer()
|
clearBuffer()
|
||||||
// paint black
|
// paint black
|
||||||
Gdx.gl.glClearColor(0f,0f,0f,1f) // solid black: so that unused area will be also black
|
gdxClearAndSetBlend(0f,0f,0f,1f) // solid black: so that unused area will be also black
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
}
|
}
|
||||||
fboA_lightMixed.inAction(null, null) { clearBuffer() }
|
fboA_lightMixed.inAction(null, null) { clearBuffer() }
|
||||||
|
|
||||||
@@ -433,11 +428,7 @@ object IngameRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun clearBuffer() {
|
private fun clearBuffer() {
|
||||||
Gdx.gl.glClearColor(0f,0f,0f,0f)
|
gdxClearAndSetBlend(0f,0f,0f,0f)
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
|
|
||||||
Gdx.gl.glEnable(GL20.GL_BLEND)
|
|
||||||
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun moveCameraToWorldCoord() {
|
private fun moveCameraToWorldCoord() {
|
||||||
|
|||||||
Reference in New Issue
Block a user