prolonged alpha blending issue seemingly fixed?

at least it's partially fixed...
This commit is contained in:
minjaesong
2019-01-07 17:34:47 +09:00
parent 9133f05b5e
commit 9140d6d8b0
9 changed files with 46 additions and 62 deletions

View File

@@ -4,8 +4,12 @@ import com.badlogic.gdx.Game
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.backends.lwjgl.LwjglApplication
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 net.torvald.terrarum.gdxClearAndSetBlend
import net.torvald.terrarum.inUse
import java.awt.BorderLayout
import java.awt.Font
@@ -272,11 +276,7 @@ class SpriteAssemblerPreview: Game() {
}
Gdx.gl.glClearColor(.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)
gdxClearAndSetBlend(.62f,.79f,1f,1f)
batch.inUse {

View File

@@ -26,6 +26,8 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import static net.torvald.terrarum.TerrarumKt.gdxClearAndSetBlend;
/**
* The framework's Application Loader
*
@@ -245,12 +247,7 @@ public class AppLoader implements ApplicationListener {
FrameBufferManager.begin(renderFBO);
Gdx.gl.glClearColor(.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);
gdxClearAndSetBlend(.094f, .094f, .094f, 0f);
FrameBufferManager.end();

View File

@@ -3,7 +3,6 @@ package net.torvald.terrarum
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.Screen
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.langpack.Lang
@@ -39,8 +38,7 @@ object ErrorDisp : Screen {
}
override fun render(delta: Float) {
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)

View File

@@ -2,12 +2,14 @@ package net.torvald.terrarum
import com.badlogic.gdx.Gdx
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.jme3.math.FastMath
import net.torvald.dataclass.HistoryArray
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.Ingame
/**
* Created by minjaesong on 2017-07-13.
@@ -123,12 +125,10 @@ object LoadScreen : ScreenAdapter() {
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)
textFbo.inAction(null, null) {
Gdx.gl.glClearColor(0f, 0f, 0f, 0f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
gdxClearAndSetBlend(0f, 0f, 0f, 0f)
}
// update arrow object

View File

@@ -39,11 +39,7 @@ object PostProcessor {
AppLoader.debugTimers["Renderer.PostProcessor"] = measureNanoTime {
Gdx.gl.glClearColor(.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)
gdxClearAndSetBlend(.094f, .094f, .094f, 0f)
val shader: ShaderProgram? =
if (AppLoader.getConfigBoolean("fxdither"))

View File

@@ -21,7 +21,6 @@ import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorID
import net.torvald.terrarum.imagefont.TinyAlphNum
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.modulebasegame.Ingame
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
@@ -396,17 +395,17 @@ object Terrarum : Screen {
// jump straight into the ingame
val ingame = Ingame(batch)
/*val ingame = Ingame(batch)
ingame.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong())
ingame.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW
LoadScreen.screenToLoad = ingame
this.ingame = ingame
setScreen(LoadScreen)
setScreen(LoadScreen)*/
// title screen
//AppLoader.getINSTANCE().setScreen(TitleScreen(batch))
AppLoader.getINSTANCE().setScreen(TitleScreen(batch))
}
fun setScreen(screen: Screen) {
@@ -598,7 +597,10 @@ fun blendMul(batch: SpriteBatch? = null) {
fun blendNormal(batch: SpriteBatch? = null) {
(batch ?: Terrarum.batch).enableBlending()
(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.glBlendFuncSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_SRC_ALPHA, GL20.GL_ONE)
}
fun blendScreen(batch: SpriteBatch? = null) {
@@ -611,6 +613,20 @@ fun blendDisable(batch: SpriteBatch? = null) {
(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 {
const val SCREEN = "screen"
const val MULTIPLY = "multiply"

View File

@@ -3,7 +3,10 @@ package net.torvald.terrarum
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.InputAdapter
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.TextureRegion
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())
// render world
Gdx.gl.glClearColor(.64f, .754f, .84f, 1f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
IngameRenderer.invoke(world = demoWorld, uisToDraw = uiContainer)

View File

@@ -251,22 +251,6 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
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()'?
}
}

View File

@@ -12,8 +12,8 @@ import net.torvald.terrarum.gamecontroller.KeyToggler
import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.modulebasegame.gameactors.ParticleBase
import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.worlddrawer.BlocksDrawer
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.worlddrawer.LightmapRenderer
@@ -93,11 +93,7 @@ object IngameRenderer {
// clear main or whatever super-FBO being used
//clearBuffer()
Gdx.gl.glClearColor(.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)
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
///////////////////////////////////////////////////////////////////////
@@ -321,8 +317,7 @@ object IngameRenderer {
fboA.inAction(null, null) {
clearBuffer()
// paint black
Gdx.gl.glClearColor(0f,0f,0f,1f) // solid black: so that unused area will be also black
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
gdxClearAndSetBlend(0f,0f,0f,1f) // solid black: so that unused area will be also black
}
fboA_lightMixed.inAction(null, null) { clearBuffer() }
@@ -433,11 +428,7 @@ object IngameRenderer {
}
private fun clearBuffer() {
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)
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
gdxClearAndSetBlend(0f,0f,0f,0f)
}
private fun moveCameraToWorldCoord() {