mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-12 07:44:03 +09:00
graphicsadapter: using theme string instead of multiple args
This commit is contained in:
@@ -29,7 +29,7 @@ class VMGUI(val appConfig: LwjglApplicationConfiguration) : ApplicationAdapter()
|
|||||||
override fun create() {
|
override fun create() {
|
||||||
super.create()
|
super.create()
|
||||||
|
|
||||||
gpu = GraphicsAdapter(vm, lcdMode = false)
|
gpu = GraphicsAdapter(vm, theme = GraphicsAdapter.THEME_COLORCRT)
|
||||||
|
|
||||||
vm.peripheralTable[1] = PeripheralEntry(
|
vm.peripheralTable[1] = PeripheralEntry(
|
||||||
VM.PERITYPE_GPU_AND_TERM,
|
VM.PERITYPE_GPU_AND_TERM,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import java.io.InputStream
|
|||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
|
||||||
open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert: Boolean = true) : GlassTty(Companion.TEXT_ROWS, Companion.TEXT_COLS), PeriBase {
|
open class GraphicsAdapter(val vm: VM, val theme: String = "") : GlassTty(Companion.TEXT_ROWS, Companion.TEXT_COLS), PeriBase {
|
||||||
|
|
||||||
override fun getVM(): VM {
|
override fun getVM(): VM {
|
||||||
return vm
|
return vm
|
||||||
@@ -34,8 +34,22 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
internal val spriteAndTextArea = UnsafeHelper.allocate(10660L)
|
internal val spriteAndTextArea = UnsafeHelper.allocate(10660L)
|
||||||
protected val unusedArea = ByteArray(92)
|
protected val unusedArea = ByteArray(92)
|
||||||
|
|
||||||
protected val paletteShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) DRAW_SHADER_FRAG_LCD_NOINV else if (lcdMode) DRAW_SHADER_FRAG_LCD else DRAW_SHADER_FRAG)
|
protected val paletteShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT,
|
||||||
protected val textShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) TEXT_TILING_SHADER_LCD_NOINV else if (lcdMode) TEXT_TILING_SHADER_LCD else TEXT_TILING_SHADER)
|
if (theme.startsWith("pmlcd") && !theme.endsWith("_inverted"))
|
||||||
|
DRAW_SHADER_FRAG_LCD_NOINV
|
||||||
|
else if (theme.startsWith("pmlcd"))
|
||||||
|
DRAW_SHADER_FRAG_LCD
|
||||||
|
else
|
||||||
|
DRAW_SHADER_FRAG
|
||||||
|
)
|
||||||
|
protected val textShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT,
|
||||||
|
if (theme.startsWith("pmlcd") && !theme.endsWith("_inverted"))
|
||||||
|
TEXT_TILING_SHADER_LCD_NOINV
|
||||||
|
else if (theme.startsWith("pmlcd"))
|
||||||
|
TEXT_TILING_SHADER_LCD
|
||||||
|
else
|
||||||
|
TEXT_TILING_SHADER
|
||||||
|
)
|
||||||
|
|
||||||
override var blinkCursor = true
|
override var blinkCursor = true
|
||||||
override var ttyRawMode = false
|
override var ttyRawMode = false
|
||||||
@@ -525,7 +539,7 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
private var textCursorBlinkTimer = 0f
|
private var textCursorBlinkTimer = 0f
|
||||||
private val textCursorBlinkInterval = 0.5f
|
private val textCursorBlinkInterval = 0.5f
|
||||||
private var textCursorIsOn = true
|
private var textCursorIsOn = true
|
||||||
private var glowDecay = if (lcdMode) 0.63f else 0.32f
|
private var glowDecay = if (theme.startsWith("pmlcd")) 0.63f else 0.32f
|
||||||
private var decayColor = Color(1f, 1f, 1f, 1f - glowDecay)
|
private var decayColor = Color(1f, 1f, 1f, 1f - glowDecay)
|
||||||
|
|
||||||
fun render(delta: Float, batch: SpriteBatch, x: Float, y: Float) {
|
fun render(delta: Float, batch: SpriteBatch, x: Float, y: Float) {
|
||||||
@@ -552,7 +566,7 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
batch.inUse {
|
batch.inUse {
|
||||||
|
|
||||||
// clear screen
|
// clear screen
|
||||||
batch.color = if (lcdMode) LCD_BASE_COL else clearCol
|
batch.color = if (theme.startsWith("pmlcd")) LCD_BASE_COL else clearCol
|
||||||
batch.draw(faketex, 0f, 0f, WIDTH.toFloat(), HEIGHT.toFloat())
|
batch.draw(faketex, 0f, 0f, WIDTH.toFloat(), HEIGHT.toFloat())
|
||||||
|
|
||||||
|
|
||||||
@@ -564,7 +578,7 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
// must be done every time the shader is "actually loaded"
|
// must be done every time the shader is "actually loaded"
|
||||||
// try this: if above line precedes 'batch.shader = paletteShader', it won't work
|
// try this: if above line precedes 'batch.shader = paletteShader', it won't work
|
||||||
batch.shader.setUniform4fv("pal", paletteOfFloats, 0, paletteOfFloats.size)
|
batch.shader.setUniform4fv("pal", paletteOfFloats, 0, paletteOfFloats.size)
|
||||||
if (lcdMode) batch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL)
|
if (theme.startsWith("pmlcd")) batch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL)
|
||||||
|
|
||||||
// draw framebuffer
|
// draw framebuffer
|
||||||
batch.draw(rendertex, x, y)
|
batch.draw(rendertex, x, y)
|
||||||
@@ -638,7 +652,7 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
textShader.setUniformf("screenDimension", WIDTH.toFloat(), HEIGHT.toFloat())
|
textShader.setUniformf("screenDimension", WIDTH.toFloat(), HEIGHT.toFloat())
|
||||||
textShader.setUniformf("tilesInAtlas", 16f, 16f)
|
textShader.setUniformf("tilesInAtlas", 16f, 16f)
|
||||||
textShader.setUniformf("atlasTexSize", chrrom0.width.toFloat(), chrrom0.height.toFloat())
|
textShader.setUniformf("atlasTexSize", chrrom0.width.toFloat(), chrrom0.height.toFloat())
|
||||||
if (lcdMode) batch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL)
|
if (theme.startsWith("pmlcd")) batch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL)
|
||||||
|
|
||||||
batch.draw(faketex, 0f, 0f, WIDTH.toFloat(), HEIGHT.toFloat())
|
batch.draw(faketex, 0f, 0f, WIDTH.toFloat(), HEIGHT.toFloat())
|
||||||
|
|
||||||
@@ -718,6 +732,11 @@ open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert:
|
|||||||
private fun Boolean.toInt() = if (this) 1 else 0
|
private fun Boolean.toInt() = if (this) 1 else 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
const val THEME_COLORCRT = "crt_color"
|
||||||
|
const val THEME_GREYCRT = "crt"
|
||||||
|
const val THEME_LCD = "pmlcd"
|
||||||
|
const val THEME_LCD_INVERTED = "pmlcd_inverted"
|
||||||
|
|
||||||
const val WIDTH = 560
|
const val WIDTH = 560
|
||||||
const val HEIGHT = 448
|
const val HEIGHT = 448
|
||||||
const val TEXT_COLS = 80
|
const val TEXT_COLS = 80
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package net.torvald.tsvm.peripheral
|
|||||||
|
|
||||||
import net.torvald.tsvm.VM
|
import net.torvald.tsvm.VM
|
||||||
|
|
||||||
class TexticsAdapter(vm: VM, lcdMode: Boolean = false, lcdInvert: Boolean = true) : GraphicsAdapter(vm, lcdMode, lcdInvert) {
|
class TexticsAdapter(vm: VM, theme: String) : GraphicsAdapter(vm, theme) {
|
||||||
|
|
||||||
override fun peek(addr: Long): Byte? {
|
override fun peek(addr: Long): Byte? {
|
||||||
return when (addr) {
|
return when (addr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user