mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 12:25:12 -04:00
fix reading of png rgb
This commit is contained in:
parent
35a9a08880
commit
6cfb689f7b
@ -14,6 +14,8 @@
|
||||
package de.bixilon.minosoft.gui.rendering.textures
|
||||
|
||||
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.data.buffer.RGB8Buffer
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.data.buffer.RGBA8Buffer
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.data.buffer.TextureBuffer
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.data.buffer.TextureBufferFactory
|
||||
import org.testng.Assert.assertEquals
|
||||
@ -25,6 +27,7 @@ import java.io.InputStream
|
||||
class TextureReadingTest {
|
||||
private val GRAY_GRAY = TextureReadingTest::class.java.getResourceAsStream("/texture_reading/gray_gray.png")!!.readAllBytes()
|
||||
private val GRAY_RGB = TextureReadingTest::class.java.getResourceAsStream("/texture_reading/gray_rgb.png")!!.readAllBytes()
|
||||
private val SAND = TextureReadingTest::class.java.getResourceAsStream("/texture_reading/sand.png")!!.readAllBytes()
|
||||
|
||||
private val READ_1 = TextureUtil::class.java.getDeclaredMethod("readTexture1", InputStream::class.java, TextureBufferFactory::class.java).apply { isAccessible = true }
|
||||
private val READ_2 = TextureUtil::class.java.getDeclaredMethod("readTexture2", InputStream::class.java, TextureBufferFactory::class.java).apply { isAccessible = true }
|
||||
@ -62,4 +65,34 @@ class TextureReadingTest {
|
||||
val texture = READ_2.invoke(TextureUtil, ByteArrayInputStream(GRAY_GRAY), null) as TextureBuffer
|
||||
texture.assertGray()
|
||||
}
|
||||
|
||||
private fun TextureBuffer.assertSand() {
|
||||
assertEquals(getRGBA(0, 0), 0xE7E4BBFF.toInt())
|
||||
assertEquals(getRGBA(1, 0), 0xDACFA3FF.toInt())
|
||||
assertEquals(getRGBA(0, 1), 0xD5C496FF.toInt())
|
||||
|
||||
}
|
||||
|
||||
fun `read1 sand rgba`() {
|
||||
val texture = READ_1.invoke(TextureUtil, ByteArrayInputStream(SAND), TextureBufferFactory { RGBA8Buffer(it) }) as TextureBuffer
|
||||
texture.assertSand()
|
||||
}
|
||||
|
||||
@Test(enabled = false)
|
||||
fun `read1 sand rgb`() {
|
||||
val texture = READ_1.invoke(TextureUtil, ByteArrayInputStream(SAND), TextureBufferFactory { RGB8Buffer(it) }) as TextureBuffer
|
||||
texture.assertSand()
|
||||
}
|
||||
|
||||
@Test(enabled = false)
|
||||
fun `read2 sand rgba`() {
|
||||
val texture = READ_2.invoke(TextureUtil, ByteArrayInputStream(SAND), TextureBufferFactory { RGBA8Buffer(it) }) as TextureBuffer
|
||||
texture.assertSand()
|
||||
}
|
||||
|
||||
@Test(enabled = false)
|
||||
fun `read2 sand rgb`() {
|
||||
val texture = READ_2.invoke(TextureUtil, ByteArrayInputStream(SAND), TextureBufferFactory { RGB8Buffer(it) }) as TextureBuffer
|
||||
texture.assertSand()
|
||||
}
|
||||
}
|
||||
|
BIN
src/integration-test/resources/texture_reading/sand.png
Normal file
BIN
src/integration-test/resources/texture_reading/sand.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 189 B |
@ -27,7 +27,7 @@ object OpenGLTextureUtil {
|
||||
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_T, GL_REPEAT)
|
||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, if (mipmaps == 0) GL_NEAREST else GL_NEAREST_MIPMAP_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, if (mipmaps == 0) GL_NEAREST else GL_NEAREST_MIPMAP_LINEAR)
|
||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, mipmaps)
|
||||
|
||||
|
@ -52,8 +52,9 @@ object TextureUtil {
|
||||
val decoder = PNGDecoder(this)
|
||||
val size = Vec2i(decoder.width, decoder.height)
|
||||
val buffer = factory?.create(size) ?: when {
|
||||
decoder.hasAlphaChannel() -> RGBA8Buffer(size)
|
||||
else -> RGB8Buffer(size)
|
||||
decoder.hasAlphaChannel() && decoder.hasAlpha() -> RGBA8Buffer(size)
|
||||
// else -> RGB8Buffer(size) // TODO: pngdecoder is broken
|
||||
else -> RGBA8Buffer(size)
|
||||
}
|
||||
val format = when {
|
||||
buffer.bits == 8 && buffer.components == 4 && buffer.alpha -> PNGDecoder.Format.RGBA
|
||||
@ -99,6 +100,7 @@ object TextureUtil {
|
||||
return try {
|
||||
readTexture1(factory)
|
||||
} catch (exception: Throwable) {
|
||||
exception.printStackTrace()
|
||||
this.reset()
|
||||
readTexture2(factory)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user