mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-12 08:54:04 +09:00
fix: test window rendering quirks
This commit is contained in:
@@ -4,9 +4,11 @@ import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration
|
|||||||
import com.badlogic.gdx.files.FileHandle
|
import com.badlogic.gdx.files.FileHandle
|
||||||
import com.badlogic.gdx.graphics.*
|
import com.badlogic.gdx.graphics.*
|
||||||
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.glutils.FrameBuffer
|
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
||||||
import com.badlogic.gdx.utils.ScreenUtils
|
import com.badlogic.gdx.utils.ScreenUtils
|
||||||
import com.badlogic.gdx.utils.StreamUtils
|
import com.badlogic.gdx.utils.StreamUtils
|
||||||
|
import net.torvald.terrarumsansbitmap.MovableType
|
||||||
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap
|
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@@ -19,32 +21,35 @@ class FontTestGDX : Game() {
|
|||||||
|
|
||||||
lateinit var font: TerrarumSansBitmap
|
lateinit var font: TerrarumSansBitmap
|
||||||
|
|
||||||
lateinit var inputText: List<String>
|
lateinit var inputText: String
|
||||||
|
|
||||||
lateinit var batch: SpriteBatch
|
lateinit var batch: FlippingSpriteBatch
|
||||||
|
|
||||||
lateinit var frameBuffer: FrameBuffer
|
lateinit var frameBuffer: FrameBuffer
|
||||||
|
|
||||||
lateinit var camera: OrthographicCamera
|
lateinit var camera: OrthographicCamera
|
||||||
|
|
||||||
private val testing = false
|
private val testing = true
|
||||||
|
|
||||||
private val demotextName = if (testing) "testtext.txt" else "demotext.txt"
|
private val demotextName = if (testing) "testtext.txt" else "demotext_unaligned.txt"
|
||||||
private val outimageName = if (testing) "testing.PNG" else "demo.PNG"
|
private val outimageName = if (testing) "testing.PNG" else "demo.PNG"
|
||||||
|
|
||||||
private lateinit var faketex: Texture
|
private lateinit var faketex: Texture
|
||||||
|
|
||||||
private val lineHeight = 24
|
private val lineHeight = 24
|
||||||
|
|
||||||
|
|
||||||
|
lateinit var layout: MovableType
|
||||||
|
|
||||||
override fun create() {
|
override fun create() {
|
||||||
font = TerrarumSansBitmap("./assets", debug = true, flipY = false, errorOnUnknownChar = false, shadowAlpha = 0.5f) // must test for two flipY cases
|
font = TerrarumSansBitmap("./assets", debug = true, flipY = false, errorOnUnknownChar = false, shadowAlpha = 0.5f) // must test for two flipY cases
|
||||||
|
|
||||||
val inTextFile = Gdx.files.internal("./$demotextName")
|
val inTextFile = Gdx.files.internal("./$demotextName")
|
||||||
val reader = inTextFile.reader("UTF-8")
|
val reader = inTextFile.reader("UTF-8")
|
||||||
inputText = reader.readLines()
|
inputText = reader.readLines().joinToString("\n")
|
||||||
reader.close()
|
reader.close()
|
||||||
|
|
||||||
batch = SpriteBatch()
|
batch = FlippingSpriteBatch()
|
||||||
|
|
||||||
|
|
||||||
// create faketex
|
// create faketex
|
||||||
@@ -56,12 +61,15 @@ class FontTestGDX : Game() {
|
|||||||
frameBuffer = FrameBuffer(Pixmap.Format.RGBA8888, TEXW, TEXH, true)
|
frameBuffer = FrameBuffer(Pixmap.Format.RGBA8888, TEXW, TEXH, true)
|
||||||
|
|
||||||
camera = OrthographicCamera(TEXW.toFloat(), TEXH.toFloat())
|
camera = OrthographicCamera(TEXW.toFloat(), TEXH.toFloat())
|
||||||
camera.translate(TEXW.div(2f), 0f)
|
camera.translate(0f, 0f)
|
||||||
camera.setToOrtho(true, TEXW.toFloat(), TEXH.toFloat())
|
camera.setToOrtho(false, TEXW.toFloat(), TEXH.toFloat())
|
||||||
camera.update()
|
camera.update()
|
||||||
|
|
||||||
|
|
||||||
Gdx.input.inputProcessor = Navigator(this)
|
Gdx.input.inputProcessor = Navigator(this)
|
||||||
|
|
||||||
|
|
||||||
|
layout = font.typesetParagraph(batch, inputText, TEXW - 20)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getScreen(): Screen? {
|
override fun getScreen(): Screen? {
|
||||||
@@ -97,9 +105,10 @@ class FontTestGDX : Game() {
|
|||||||
batch.flush()
|
batch.flush()
|
||||||
|
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
inputText.forEachIndexed { index, s ->
|
// inputText.forEachIndexed { index, s ->
|
||||||
font.draw(batch, s, 10f, TEXH - 30f - index * lineHeight)
|
// font.draw(batch, s, 10f, TEXH - 30f - index * lineHeight)
|
||||||
}
|
// }
|
||||||
|
layout.draw(batch, 10f, 0f)
|
||||||
|
|
||||||
batch.end()
|
batch.end()
|
||||||
|
|
||||||
@@ -130,12 +139,12 @@ class FontTestGDX : Game() {
|
|||||||
Gdx.gl.glEnable(GL20.GL_BLEND)
|
Gdx.gl.glEnable(GL20.GL_BLEND)
|
||||||
batch.setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA) // for not premultiplied textures
|
batch.setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA) // for not premultiplied textures
|
||||||
|
|
||||||
|
camera.setToOrtho(true, WIDTH.toFloat(), HEIGHT.toFloat())
|
||||||
|
|
||||||
|
batch.projectionMatrix = camera.combined
|
||||||
batch.begin()
|
batch.begin()
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
batch.draw(tex, 0f, (TEXH.toFloat()/HEIGHT)*TEXH - scrollOffsetY, TEXW.toFloat(), -(TEXH.toFloat() / HEIGHT) * TEXH.toFloat())
|
batch.draw(tex!!, 0f, scrollOffsetY)
|
||||||
|
|
||||||
|
|
||||||
batch.end()
|
batch.end()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,11 +163,11 @@ class FontTestGDX : Game() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun scrollAdd(x: Int = 1) {
|
fun scrollAdd(x: Int = 1) {
|
||||||
scrollOffsetY -= (TEXH.toFloat() / HEIGHT) * lineHeight * x
|
scrollOffsetY += lineHeight * x
|
||||||
}
|
}
|
||||||
|
|
||||||
fun scrollSub(x: Int = 1) {
|
fun scrollSub(x: Int = 1) {
|
||||||
scrollOffsetY += (TEXH.toFloat() / HEIGHT) * lineHeight * x
|
scrollOffsetY -= lineHeight * x
|
||||||
}
|
}
|
||||||
|
|
||||||
class Navigator(val main: FontTestGDX) : InputAdapter() {
|
class Navigator(val main: FontTestGDX) : InputAdapter() {
|
||||||
@@ -267,8 +276,51 @@ class FontTestGDX : Game() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FlippingSpriteBatch(size: Int = 1000) : SpriteBatch(size) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function draws the flipped version of the image by giving flipped uv-coord to the SpriteBatch
|
||||||
|
*/
|
||||||
|
override fun draw(texture: Texture, x: Float, y: Float, width: Float, height: Float) =
|
||||||
|
draw(texture, x, y, width, height, 0f, 0f, 1f, 1f)
|
||||||
|
|
||||||
|
override fun draw(texture: Texture, x: Float, y: Float) =
|
||||||
|
draw(texture, x, y, texture.width.toFloat(), texture.height.toFloat(), 0f, 0f, 1f, 1f)
|
||||||
|
|
||||||
|
fun drawFlipped(texture: Texture, x: Float, y: Float, width: Float, height: Float) =
|
||||||
|
draw(texture, x, y, width, height, 0f, 1f, 1f, 0f)
|
||||||
|
fun drawFlipped(texture: Texture, x: Float, y: Float) =
|
||||||
|
draw(texture, x, y, texture.width.toFloat(), texture.height.toFloat(), 0f, 1f, 1f, 0f)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function does obey the flipping set to the TextureRegion and try to draw flipped version of it,
|
||||||
|
* without touching the flipping setting of the given region.
|
||||||
|
*/
|
||||||
|
override fun draw(region: TextureRegion, x: Float, y: Float, width: Float, height: Float) =
|
||||||
|
draw(region.texture, x, y, width, height, region.u, region.v, region.u2, region.v2)
|
||||||
|
|
||||||
|
override fun draw(region: TextureRegion, x: Float, y: Float) =
|
||||||
|
draw(region.texture, x, y, region.regionWidth.toFloat(), region.regionHeight.toFloat(), region.u, region.v, region.u2, region.v2)
|
||||||
|
|
||||||
|
fun drawFlipped(region: TextureRegion, x: Float, y: Float, width: Float, height: Float) =
|
||||||
|
draw(region.texture, x, y, width, height, region.u, region.v2, region.u2, region.v)
|
||||||
|
fun drawFlipped(region: TextureRegion, x: Float, y: Float) =
|
||||||
|
draw(region.texture, x, y, region.regionWidth.toFloat(), region.regionHeight.toFloat(), region.u, region.v2, region.u2, region.v)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NOTE TO SELF:
|
||||||
|
*
|
||||||
|
* It seems that original SpriteBatch Y-flips when it's drawing a texture, but NOT when it's drawing a textureregion
|
||||||
|
*
|
||||||
|
* (textureregion's default uv-coord is (0,0,1,1)
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
lateinit var appConfig: Lwjgl3ApplicationConfiguration
|
lateinit var appConfig: Lwjgl3ApplicationConfiguration
|
||||||
const val TEXW = 874
|
const val TEXW = 800
|
||||||
const val TEXH = 24 * 130
|
const val TEXH = 24 * 130
|
||||||
|
|
||||||
const val WIDTH = TEXW
|
const val WIDTH = TEXW
|
||||||
|
|||||||
Reference in New Issue
Block a user