mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 11:54:59 -04:00
option to disable mipmap generation
This commit is contained in:
parent
61a0d6e655
commit
ea45a04b9b
@ -36,7 +36,7 @@ class BitmapFontProvider(
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
val charRows = data["chars"].asJsonList()
|
val charRows = data["chars"].asJsonList()
|
||||||
val texture = renderWindow.textureManager.staticTextures.createTexture(data["file"].toResourceLocation().texture())
|
val texture = renderWindow.textureManager.staticTextures.createTexture(data["file"].toResourceLocation().texture(), mipmaps = false)
|
||||||
texture.load(renderWindow.connection.assetsManager)
|
texture.load(renderWindow.connection.assetsManager)
|
||||||
|
|
||||||
val height = texture.size.y / charRows.size
|
val height = texture.size.y / charRows.size
|
||||||
|
@ -41,7 +41,7 @@ class LegacyUnicodeFontProvider(
|
|||||||
char += UNICODE_PAGE_SIZE
|
char += UNICODE_PAGE_SIZE
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
val texture = renderWindow.textureManager.staticTextures.createTexture(template.format("%02x".format(page)).toResourceLocation().texture())
|
val texture = renderWindow.textureManager.staticTextures.createTexture(template.format("%02x".format(page)).toResourceLocation().texture(), mipmaps = false)
|
||||||
for (y in 0 until UNICODE_PAGE_SIZE / CHAR_SIZE) {
|
for (y in 0 until UNICODE_PAGE_SIZE / CHAR_SIZE) {
|
||||||
val yStart = PIXEL.y * y * CHAR_SIZE
|
val yStart = PIXEL.y * y * CHAR_SIZE
|
||||||
val yEnd = PIXEL.y * (y + 1) * CHAR_SIZE
|
val yEnd = PIXEL.y * (y + 1) * CHAR_SIZE
|
||||||
|
@ -23,7 +23,7 @@ interface TextureArray {
|
|||||||
val state: TextureArrayStates
|
val state: TextureArrayStates
|
||||||
|
|
||||||
operator fun get(resourceLocation: ResourceLocation): AbstractTexture?
|
operator fun get(resourceLocation: ResourceLocation): AbstractTexture?
|
||||||
fun createTexture(resourceLocation: ResourceLocation, default: () -> AbstractTexture = { PNGTexture(resourceLocation) }): AbstractTexture
|
fun createTexture(resourceLocation: ResourceLocation, mipmaps: Boolean = true, default: () -> AbstractTexture = { PNGTexture(resourceLocation, generateMipMaps = mipmaps) }): AbstractTexture
|
||||||
|
|
||||||
fun preLoad()
|
fun preLoad()
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ interface AbstractTexture {
|
|||||||
var renderData: TextureRenderData
|
var renderData: TextureRenderData
|
||||||
|
|
||||||
var data: ByteBuffer?
|
var data: ByteBuffer?
|
||||||
|
val generateMipMaps: Boolean
|
||||||
|
|
||||||
fun load(assetsManager: AssetsManager)
|
fun load(assetsManager: AssetsManager)
|
||||||
|
|
||||||
@ -48,6 +49,9 @@ interface AbstractTexture {
|
|||||||
var data = data!!
|
var data = data!!
|
||||||
|
|
||||||
images += data
|
images += data
|
||||||
|
if (!generateMipMaps) {
|
||||||
|
return images.toTypedArray()
|
||||||
|
}
|
||||||
|
|
||||||
for (i in 1 until OpenGLTextureArray.MAX_MIPMAP_LEVELS) {
|
for (i in 1 until OpenGLTextureArray.MAX_MIPMAP_LEVELS) {
|
||||||
val mipMapSize = Vec2i(size.x shr i, size.y shr i)
|
val mipMapSize = Vec2i(size.x shr i, size.y shr i)
|
||||||
|
@ -29,6 +29,7 @@ class MemoryTexture(
|
|||||||
override val resourceLocation: ResourceLocation,
|
override val resourceLocation: ResourceLocation,
|
||||||
override val size: Vec2i,
|
override val size: Vec2i,
|
||||||
override var properties: ImageProperties = ImageProperties(),
|
override var properties: ImageProperties = ImageProperties(),
|
||||||
|
override val generateMipMaps: Boolean = true,
|
||||||
generator: ((x: Int, y: Int) -> RGBColor)? = null,
|
generator: ((x: Int, y: Int) -> RGBColor)? = null,
|
||||||
) : AbstractTexture {
|
) : AbstractTexture {
|
||||||
override lateinit var textureArrayUV: Vec2
|
override lateinit var textureArrayUV: Vec2
|
||||||
|
@ -29,7 +29,10 @@ import java.nio.ByteBuffer
|
|||||||
import javax.imageio.ImageIO
|
import javax.imageio.ImageIO
|
||||||
|
|
||||||
|
|
||||||
class PNGTexture(override val resourceLocation: ResourceLocation) : AbstractTexture {
|
class PNGTexture(
|
||||||
|
override val resourceLocation: ResourceLocation,
|
||||||
|
override val generateMipMaps: Boolean = true,
|
||||||
|
) : AbstractTexture {
|
||||||
override lateinit var renderData: TextureRenderData
|
override lateinit var renderData: TextureRenderData
|
||||||
|
|
||||||
override lateinit var textureArrayUV: Vec2
|
override lateinit var textureArrayUV: Vec2
|
||||||
|
@ -30,6 +30,8 @@ class SpriteTexture(private val original: AbstractTexture) : AbstractTexture {
|
|||||||
override var properties: ImageProperties by original::properties
|
override var properties: ImageProperties by original::properties
|
||||||
override var renderData: TextureRenderData by original::renderData
|
override var renderData: TextureRenderData by original::renderData
|
||||||
override val transparency: TextureTransparencies by original::transparency
|
override val transparency: TextureTransparencies by original::transparency
|
||||||
|
override val generateMipMaps: Boolean
|
||||||
|
get() = original.generateMipMaps
|
||||||
|
|
||||||
override var state: TextureStates = TextureStates.DECLARED
|
override var state: TextureStates = TextureStates.DECLARED
|
||||||
private set
|
private set
|
||||||
|
@ -51,7 +51,7 @@ class OpenGLTextureArray(
|
|||||||
private val lastTextureId = IntArray(TEXTURE_RESOLUTION_ID_MAP.size)
|
private val lastTextureId = IntArray(TEXTURE_RESOLUTION_ID_MAP.size)
|
||||||
|
|
||||||
|
|
||||||
override fun createTexture(resourceLocation: ResourceLocation, default: () -> AbstractTexture): AbstractTexture {
|
override fun createTexture(resourceLocation: ResourceLocation, mipmaps: Boolean, default: () -> AbstractTexture): AbstractTexture {
|
||||||
var texture = textures[resourceLocation]
|
var texture = textures[resourceLocation]
|
||||||
|
|
||||||
// load .mcmeta
|
// load .mcmeta
|
||||||
@ -136,7 +136,7 @@ class OpenGLTextureArray(
|
|||||||
|
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
private fun loadSingleArray(resolution: Int, textures: MutableList<AbstractTexture>): Int {
|
private fun loadSingleArray(resolution: Int, textures: List<AbstractTexture>): Int {
|
||||||
val textureId = glGenTextures()
|
val textureId = glGenTextures()
|
||||||
glBindTexture(GL_TEXTURE_2D_ARRAY, textureId)
|
glBindTexture(GL_TEXTURE_2D_ARRAY, textureId)
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT)
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT)
|
||||||
@ -155,8 +155,15 @@ class OpenGLTextureArray(
|
|||||||
|
|
||||||
val renderData = texture.renderData as OpenGLTextureData
|
val renderData = texture.renderData as OpenGLTextureData
|
||||||
for ((level, data) in mipMaps.withIndex()) {
|
for ((level, data) in mipMaps.withIndex()) {
|
||||||
val size = texture.size shr level
|
if (texture.generateMipMaps) {
|
||||||
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, level, 0, 0, renderData.index, size.x, size.y, level + 1, GL_RGBA, GL_UNSIGNED_BYTE, data)
|
val size = texture.size shr level
|
||||||
|
|
||||||
|
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, level, 0, 0, renderData.index, size.x, size.y, level + 1, GL_RGBA, GL_UNSIGNED_BYTE, data)
|
||||||
|
} else {
|
||||||
|
val size = texture.size
|
||||||
|
|
||||||
|
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, level, 0, 0, renderData.index, size.x, size.y, level + 1, GL_RGBA, GL_UNSIGNED_BYTE, mipMaps[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
texture.data = null
|
texture.data = null
|
||||||
|
Loading…
x
Reference in New Issue
Block a user