diff --git a/assets/raytracelight.frag b/assets/raytracelight.frag index c36343fe9..2590ccb1e 100644 --- a/assets/raytracelight.frag +++ b/assets/raytracelight.frag @@ -10,6 +10,7 @@ varying vec2 v_texCoords; // the divisor of 2 input and an output must be the same. I.e. either divide all by 4, or not. uniform sampler2D shades; uniform sampler2D lights; +// WARNING -- Gdx.Color.toIntBits returns ABGR, but GLSL expects RGBA. Use the function Color.toRGBA() in LightmapRenderNew uniform sampler2D u_texture; uniform vec2 outSize; uniform float multiplier = 4.0; // if divided by four, put 4.0 in there @@ -95,6 +96,8 @@ void main() { gl_FragColor = outColor * multiplier; gl_FragColor = vec4(0,1,0,1); - gl_FragColor = vec4(texture2D(lights, v_texCoords)) * multiplier; + gl_FragColor = vec4(texture2D(lights, gl_FragCoord.xy / outSize)) * multiplier; + + // FIXME (gl_FragCoord / outSize) != v_texCoords } diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt index 6d7c55f2c..869fb013f 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt @@ -97,8 +97,8 @@ object LightmapRenderer { private lateinit var texturedLightCamera: OrthographicCamera private lateinit var texturedLightBatch: SpriteBatch - private const val LIGHTMAP_UNIT = 1 - private const val SHADEMAP_UNIT = 0 + private const val LIGHTMAP_UNIT = 0 + private const val SHADEMAP_UNIT = 1 init { printdbg(this, "Overscan open: $overscan_open; opaque: $overscan_opaque") @@ -403,17 +403,18 @@ object LightmapRenderer { // Several variables will be altered by this. See its documentation. getLightsAndShades(wx, wy) - texturedLightSourcePixmap.drawPixel(tx, ty, lightLevelThis.toIntBits()) - texturedShadeSourcePixmap.drawPixel(tx, ty, thisTileOpacity.toIntBits()) + texturedLightSourcePixmap.drawPixel(tx, ty, lightLevelThis.toRGBA()) + texturedShadeSourcePixmap.drawPixel(tx, ty, thisTileOpacity.toRGBA()) - if (wy in for_y_start..for_y_end && wx in for_x_start..for_x_end) { + /*if (wy in for_y_start..for_y_end && wx in for_x_start..for_x_end) { texturedLightSourcePixmap.drawPixel(tx, ty, 0x00FFFFFF) } else { texturedLightSourcePixmap.drawPixel(tx, ty, 0xFF000000.toInt()) - } + }*/ + } } @@ -426,9 +427,10 @@ object LightmapRenderer { texturedLightMap.inAction(texturedLightCamera, null) { gdxClearAndSetBlend(0f,0f,0f,0f) + Gdx.gl.glDisable(GL20.GL_BLEND) - texturedLightSources.bind(LIGHTMAP_UNIT) texturedShadeSources.bind(SHADEMAP_UNIT) + texturedLightSources.bind(LIGHTMAP_UNIT) lightCalcShader.begin() lightCalcShader.setUniformMatrix("u_projTrans", texturedLightCamera.combined) @@ -1079,3 +1081,6 @@ object LightmapRenderer { return (1f - scale) * startValue + scale * endValue } } + +fun Color.toRGBA() = (255 * r).toInt() shl 24 or ((255 * g).toInt() shl 16) or ((255 * b).toInt() shl 8) or (255 * a).toInt() +