mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-10 13:51:53 +09:00
more 'correct' dithering shader code
This commit is contained in:
@@ -51,6 +51,10 @@ object TerrarumPostProcessor : Disposable {
|
||||
|
||||
private val recommendRatio = 1.5f
|
||||
|
||||
/*private val testfill = Texture("./assets/test_fill.tga").also {
|
||||
it.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
||||
}*/
|
||||
|
||||
private val shaderQuant = mapOf(
|
||||
8 to 255f,
|
||||
10 to 1023f,
|
||||
@@ -77,6 +81,7 @@ object TerrarumPostProcessor : Disposable {
|
||||
shaderPostNoDither.dispose()
|
||||
if (::lutTex.isInitialized) lutTex.tryDispose()
|
||||
if (::outFBO.isInitialized) outFBO.dispose()
|
||||
// testfill.dispose()
|
||||
}
|
||||
|
||||
private var deltatBenchStr = "ΔF: Gathering data"
|
||||
@@ -239,6 +244,7 @@ object TerrarumPostProcessor : Disposable {
|
||||
|
||||
App.getCurrentDitherTex().bind(1)
|
||||
fbo.colorBufferTexture.bind(0)
|
||||
// testfill.bind(0)
|
||||
|
||||
shader.bind()
|
||||
shader.setUniformMatrix("u_projTrans", projMat)
|
||||
@@ -246,6 +252,7 @@ object TerrarumPostProcessor : Disposable {
|
||||
shader.setUniformi("rnd", rng.nextInt(8192), rng.nextInt(8192))
|
||||
shader.setUniformi("u_pattern", 1)
|
||||
shader.setUniformf("quant", shaderQuant[App.getConfigInt("displaycolourdepth")] ?: 255f)
|
||||
// shader.setUniformf("quant", 1f)
|
||||
shader.setUniformMatrix4fv("swizzler", swizzler, rng.nextInt(24), 16*4)
|
||||
App.fullscreenQuad.render(shader, GL20.GL_TRIANGLE_FAN)
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@ vec4 invQuant = vec4(1.0 / quant);
|
||||
out vec4 fragColor;
|
||||
|
||||
const vec2 boolean = vec2(0.0, 1.0);
|
||||
|
||||
const vec4 halfPulldown = vec4(0.5 / 255.0); // 255.0 comes from the dithering pattern, not the quantiser
|
||||
const vec4 halfPullUp = vec4(255.0 / 254.5); // 255.0 comes from the dithering pattern, not the quantiser
|
||||
const vec2 patternsize = vec2(1.0/512.0, 1.0/512.0);
|
||||
|
||||
|
||||
@@ -46,8 +47,8 @@ vec4 nearestColour(vec4 inColor) {
|
||||
}
|
||||
|
||||
vec4 getDitherredDot(vec4 inColor) {
|
||||
vec4 bayerThreshold = swizzler * vec4(texture(u_pattern, (gl_FragCoord.xy + rnd) * patternsize));
|
||||
return nearestColour(fma(bayerThreshold, invQuant, inColor));
|
||||
vec4 bayerThreshold = swizzler * vec4(texture(u_pattern, (gl_FragCoord.xy + rnd) * patternsize) - halfPulldown);
|
||||
return nearestColour(fma(bayerThreshold, invQuant, inColor * halfPullUp));
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
|
||||
Reference in New Issue
Block a user