Spaces:
Build error
Build error
eagler-1-12-4
/
desktopRuntime
/resources
/assets
/eagler
/glsl
/dynamiclights
/accel_particle_dynamiclights.fsh
/* | |
* Copyright (c) 2024 lax1dude. All Rights Reserved. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | |
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | |
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
* POSSIBILITY OF SUCH DAMAGE. | |
* | |
*/ | |
precision lowp int; | |
precision mediump float; | |
precision mediump sampler2D; | |
in vec4 v_position4f; | |
in vec2 v_texCoord2f; | |
in vec4 v_color4f; | |
in vec2 v_lightmap2f; | |
layout(location = 0) out vec4 output4f; | |
uniform sampler2D u_inputTexture; | |
uniform sampler2D u_lightmapTexture; | |
uniform mat4 u_inverseViewMatrix4f; | |
layout(std140) uniform u_chunkLightingData { | |
mediump int u_dynamicLightCount1i; | |
mediump int _paddingA_; | |
mediump int _paddingB_; | |
mediump int _paddingC_; | |
mediump vec4 u_dynamicLightArray[12]; | |
}; | |
void main() { | |
vec4 color = texture(u_inputTexture, v_texCoord2f) * v_color4f; | |
if(color.a < 0.004) { | |
discard; | |
} | |
vec4 light; | |
float blockLight = v_lightmap2f.x; | |
float diffuse = 0.0; | |
float len; | |
if(u_dynamicLightCount1i > 0) { | |
vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; | |
worldPosition4f.xyz /= worldPosition4f.w; | |
vec3 normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); | |
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; | |
for(int i = 0; i < safeLightCount; ++i) { | |
light = u_dynamicLightArray[i]; | |
light.xyz = light.xyz - worldPosition4f.xyz; | |
len = length(light.xyz); | |
diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); | |
} | |
blockLight = min(blockLight + diffuse * 0.066667, 1.0); | |
} | |
color *= texture(u_lightmapTexture, vec2(blockLight, v_lightmap2f.y)); | |
output4f = color; | |
} | |