mirror of
https://github.com/Eaglercraft-Archive/Eaglercraftx-1.8.8-src.git
synced 2025-06-28 02:48:14 -05:00
Update #52 - Fixed various issues with the client
This commit is contained in:
@ -1 +1 @@
|
||||
u51
|
||||
u52
|
@ -64,5 +64,8 @@
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
"enableEPKVersionCheck": true,
|
||||
"enforceVSync": true,
|
||||
"keepAliveHack": true,
|
||||
"finishOnSwap": true
|
||||
}
|
@ -64,5 +64,8 @@
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
"enableEPKVersionCheck": true,
|
||||
"enforceVSync": true,
|
||||
"keepAliveHack": true,
|
||||
"finishOnSwap": true
|
||||
}
|
@ -64,5 +64,8 @@
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
"enableEPKVersionCheck": true,
|
||||
"enforceVSync": true,
|
||||
"keepAliveHack": true,
|
||||
"finishOnSwap": true
|
||||
}
|
@ -83,7 +83,6 @@ uniform sampler2D u_metalsLUT;
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
@ -147,7 +146,7 @@ void main() {
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -156,7 +155,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -166,7 +165,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@ -176,7 +175,7 @@ void main() {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
vec3 normalWrap3f = normalVector3f * COMPARE_LT_C_C(dot(-worldDirection4f.xyz, normalVector3f), 0.0, -1.0, 1.0);
|
||||
vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0);
|
||||
lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
@ -195,8 +194,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, -0.25));
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, 0.75));
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
@ -211,7 +210,7 @@ void main() {
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
dlightDir3f = dlightDir3f * COMPARE_LT_C_C(dot(dlightDir3f, normalVector3f), 0.0, 1.0, -1.0);
|
||||
dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0);
|
||||
dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
|
Binary file not shown.
@ -1,3 +1,5 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2025 lax1dude. All Rights Reserved.
|
||||
*
|
||||
@ -14,22 +16,28 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// Assuming modern GPUs probably implement clamp, max, and ciel without branches
|
||||
// Tests for a D3D bug in ANGLE, this only became an issue recently...
|
||||
|
||||
// value1 > value2 ? 1.0 : 0.0
|
||||
#define COMPARE_GT_0_1(value1, value2) clamp(ceil(value1 - value2), 0.0, 1.0)
|
||||
precision highp float;
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
// value1 > value2 ? N : 0.0
|
||||
#define COMPARE_GT_0_ANY(value1, value2) max(ceil(value1 - value2), 0.0)
|
||||
uniform sampler2DShadow u_testSampler;
|
||||
|
||||
// value1 < value2 ? 1.0 : 0.0
|
||||
#define COMPARE_LT_0_1(value1, value2) clamp(ceil(value2 - value1), 0.0, 1.0)
|
||||
out vec4 fragOut4f;
|
||||
|
||||
// value1 < value2 ? N : 0.0
|
||||
#define COMPARE_LT_0_ANY(value1, value2) max(ceil(value2 - value1), 0.0)
|
||||
|
||||
// value1 > value2 ? ifGT : ifLT
|
||||
#define COMPARE_GT_C_C(value1, value2, ifGT, ifLT) (COMPARE_GT_0_1(value1, value2) * (ifGT - ifLT) + ifLT)
|
||||
|
||||
// value1 < value2 ? ifLT : ifGT
|
||||
#define COMPARE_LT_C_C(value1, value2, ifLT, ifGT) (COMPARE_LT_0_1(value1, value2) * (ifLT - ifGT) + ifGT)
|
||||
void main() {
|
||||
float stupid = texture(u_testSampler, vec3(69.0, 69.0, 0.5));
|
||||
for(;;) {
|
||||
if (stupid != 69.0) {
|
||||
stupid = textureLod(u_testSampler, vec3(420.0, 420.0, 0.69), 0.0);
|
||||
break;
|
||||
}
|
||||
if (stupid != 420.0) {
|
||||
stupid = textureLod(u_testSampler, vec3(69.0, 69.0, 0.420), 0.0);
|
||||
break;
|
||||
}
|
||||
fragOut4f = vec4(0.0);
|
||||
return;
|
||||
}
|
||||
fragOut4f = vec4(stupid);
|
||||
}
|
@ -73,15 +73,20 @@ void main() {
|
||||
vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025;
|
||||
float sunVisibility = sample0;
|
||||
|
||||
GET_CLOUDS((samplePos + sunDirection), sample1)
|
||||
vec3 pos = samplePos + sunDirection;
|
||||
GET_CLOUDS(pos, sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 2.0), sample1)
|
||||
pos = samplePos + sunDirection * 2.0;
|
||||
GET_CLOUDS(pos, sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 3.0), sample1)
|
||||
pos = samplePos + sunDirection * 3.0;
|
||||
GET_CLOUDS(pos, sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 4.0), sample1)
|
||||
pos = samplePos + sunDirection * 4.0;
|
||||
GET_CLOUDS(pos, sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 5.0), sample1)
|
||||
pos = samplePos + sunDirection * 5.0;
|
||||
GET_CLOUDS(pos, sample1)
|
||||
sunVisibility += sample1;
|
||||
|
||||
sunVisibility = exp2(-sunVisibility * 50.0);
|
||||
|
@ -60,7 +60,6 @@ uniform float u_skyLightFactor1f;
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
void main() {
|
||||
vec3 diffuseColor3f;
|
||||
@ -87,7 +86,7 @@ void main() {
|
||||
|
||||
#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
|
||||
vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
|
||||
ao.g = mix(COMPARE_GT_0_1(0.0, ao.b), 1.0, ao.g);
|
||||
ao.g = ao.b > 0.0 ? ao.g : 1.0;
|
||||
shadow = mix(shadow, shadow * ao.g, 0.9);
|
||||
#endif
|
||||
|
||||
@ -103,8 +102,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, -0.25));
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, 0.75));
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
|
||||
@ -115,8 +114,8 @@ void main() {
|
||||
vec3 specular = vec3(0.0);
|
||||
|
||||
#ifdef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = COMPARE_LT_0_ANY(materialData4f.g, 0.06);
|
||||
f += COMPARE_LT_0_ANY(materialData4f.r, 0.5);
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) {
|
||||
vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
|
||||
worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
|
||||
@ -138,8 +137,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, -0.25));
|
||||
reflectDir.xz += vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, 0.75));
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
envMapSample4f.a += min(lightmapCoords2f.g * 2.0, 1.0) * (1.0 - envMapSample4f.a);
|
||||
@ -153,8 +152,8 @@ void main() {
|
||||
|
||||
#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
|
||||
#ifndef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = COMPARE_LT_0_ANY(materialData4f.g, 0.06);
|
||||
f += COMPARE_LT_0_ANY(materialData4f.r, 0.5);
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
if(f == 0.0) {
|
||||
#else
|
||||
if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) {
|
||||
|
@ -162,7 +162,6 @@ uniform sampler2D u_lightShaftsTexture;
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
@ -179,7 +178,7 @@ vec2(0.675, 0.682));
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z + 0.0001), 0.0);
|
||||
accum += CMPLOD0_D3D_WORKAROUND(tex, vec3(tmpVec2, vec3Pos.z + 0.0001));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -308,7 +307,7 @@ void main() {
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z));
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
@ -327,7 +326,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -337,7 +336,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@ -355,8 +354,8 @@ void main() {
|
||||
|
||||
// =========== ENVIRONMENT MAP =========== //
|
||||
|
||||
f = COMPARE_LT_0_ANY(materialData4f.g, 0.06);
|
||||
f += COMPARE_LT_0_ANY(materialData4f.r, 0.5);
|
||||
f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
while(f == 0.0) {
|
||||
float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(dst2 > 25.0) {
|
||||
@ -373,8 +372,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, -0.25));
|
||||
reflectDir.xz += vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, 0.75));
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
envMapSample4f.a += min(lightmapCoords2f.g * 2.0, 1.0) * (1.0 - envMapSample4f.a);
|
||||
@ -401,8 +400,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, -0.25));
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, COMPARE_GT_C_C(irradianceMapSamplePos2f.y, 0.0, 0.25, 0.75));
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
@ -437,7 +436,7 @@ void main() {
|
||||
vec4 fogBlend4f = vec4(0.0);
|
||||
#ifndef COMPILE_ENABLE_TEX_GEN
|
||||
while(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = COMPARE_LT_C_C(u_fogParameters4f.x, 4.0, 0.0, 4.0);
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g);
|
||||
|
||||
|
@ -85,8 +85,6 @@ layout(std140) uniform u_worldLightingData {
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform sampler2D u_brdfLUT;
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
#define GLASS_ROUGHNESS 0.15
|
||||
#define GLASS_F0 0.4
|
||||
|
||||
@ -135,7 +133,7 @@ vec2(0.675, 0.682));
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z + 0.0001), 0.0);
|
||||
accum += CMPLOD0_D3D_WORKAROUND(tex, vec3(tmpVec2, vec3Pos.z + 0.0001));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -193,7 +191,7 @@ void main() {
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001));
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
@ -212,7 +210,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -222,7 +220,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@ -253,8 +251,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, -0.25));
|
||||
reflectDir.xz += vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0 , 0.25, 0.75));
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
envMapSample4f.a += min(lightmapCoords2f.g * 2.0, 1.0) * (1.0 - envMapSample4f.a);
|
||||
@ -292,7 +290,7 @@ void main() {
|
||||
|
||||
float fogFade = 0.0;
|
||||
if(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = COMPARE_LT_C_C(u_fogParameters4f.x, 4.0, 0.0, 4.0);
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g);
|
||||
|
||||
|
@ -108,7 +108,7 @@ vec2(0.675, 0.682));
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z + 0.0001), 0.0);
|
||||
accum += CMPLOD0_D3D_WORKAROUND(tex, vec3(tmpVec2, vec3Pos.z + 0.0001));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -122,8 +122,6 @@ uniform sampler2D u_normalMap;
|
||||
uniform vec4 u_waterWindOffset4f;
|
||||
uniform vec3 u_wavingBlockOffset3f;
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
#define WATER_ROUGHNESS 0.05
|
||||
#define WATER_F0 0.5
|
||||
|
||||
@ -305,7 +303,7 @@ void main() {
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z + 0.0001));
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
@ -324,7 +322,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -334,7 +332,7 @@ void main() {
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@ -352,8 +350,8 @@ void main() {
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
|
||||
float e = 0.0;
|
||||
e += COMPARE_GT_0_ANY(envMapSample4f.g, 0.0);
|
||||
e += COMPARE_LT_0_ANY(lightmapCoords2f.y, 0.5);
|
||||
e += envMapSample4f.g <= 0.0 ? 0.0 : 1.0;
|
||||
e += lightmapCoords2f.y > 0.5 ? 0.0 : 1.0;
|
||||
//e += abs(normalVector3f.y) > 0.1 ? 0.0 : 1.0;
|
||||
if(e == 0.0) {
|
||||
vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
|
||||
@ -366,8 +364,8 @@ void main() {
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz *= vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, -0.25));
|
||||
reflectDir.xz += vec2(0.5, COMPARE_GT_C_C(reflectDir.y, 0.0, 0.25, 0.75));
|
||||
reflectDir.xz *= vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
envMapSample4f.rgb *= (lightmapCoords2f.y * 2.0 - 1.0);
|
||||
|
@ -84,8 +84,6 @@ uniform vec4 u_nearFarPlane4f;
|
||||
|
||||
uniform vec4 u_pixelAlignment4f;
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
#define reprojDepthLimit 0.25
|
||||
|
||||
#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w))
|
||||
@ -137,9 +135,9 @@ void main() {
|
||||
|
||||
#ifdef COMPILE_REPROJECT_SSR
|
||||
vec4 materials = textureLod(u_gbufferMaterialTexture, v_position2f2, 0.0);
|
||||
float f = COMPARE_LT_0_ANY(materials.g, 0.06);
|
||||
f += COMPARE_LT_0_ANY(materials.r, 0.5);
|
||||
f += COMPARE_GT_0_ANY(materials.a, 0.5);
|
||||
float f = materials.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materials.r < 0.5 ? 1.0 : 0.0;
|
||||
f += materials.a > 0.5 ? 1.0 : 0.0;
|
||||
if(f > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "§eHigh Performance PBR",
|
||||
"desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion",
|
||||
"vers": "1.4.1",
|
||||
"vers": "1.4.2",
|
||||
"author": "lax1dude",
|
||||
"api_vers": 1,
|
||||
"features": [
|
||||
|
@ -67,7 +67,7 @@ vec2(0.675, 0.682));
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z + 0.0001), 0.0);
|
||||
accum += CMPLOD0_D3D_WORKAROUND(tex, vec3(tmpVec2, vec3Pos.z + 0.0001));
|
||||
#endif
|
||||
|
||||
uniform vec3 u_sunDirection3f;
|
||||
@ -106,7 +106,7 @@ void main() {
|
||||
for(;;) {
|
||||
shadowSpacePosition = u_sunShadowMatrixLOD04f * worldSpacePosition;
|
||||
if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowSpacePosition.z + 0.0001), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowSpacePosition.z + 0.0001));
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
|
||||
@ -128,7 +128,7 @@ void main() {
|
||||
if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSpacePosition.y += 1.0;
|
||||
shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -138,7 +138,7 @@ void main() {
|
||||
if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSpacePosition.y += 2.0;
|
||||
shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0);
|
||||
shadowSample = CMPLOD0_D3D_WORKAROUND(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
@ -44,8 +44,6 @@ uniform sampler2D u_gbufferDepthTexture;
|
||||
|
||||
#define SKY_BRIGHTNESS 5.0
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
void main() {
|
||||
gl_FragDepth = 0.0;
|
||||
vec3 viewDir = normalize(v_position3f);
|
||||
@ -55,7 +53,7 @@ void main() {
|
||||
float f = max(dot(viewDir, u_sunDirection3f) - 0.995, 0.0) * 100.0;
|
||||
float intensity = min(f * 2.0, 1.0);
|
||||
intensity *= intensity * intensity * intensity * textureLod(u_sunOcclusion, vec2(0.5, 0.5), 0.0).r * 2.0;
|
||||
intensity *= 1.0 - COMPARE_GT_0_1(textureLod(u_gbufferDepthTexture, (v_positionClip3f.xy / v_positionClip3f.z) * 0.5 + 0.5, 0.0).r, 0.0);
|
||||
intensity *= step(textureLod(u_gbufferDepthTexture, (v_positionClip3f.xy / v_positionClip3f.z) * 0.5 + 0.5, 0.0).r, 0.0);
|
||||
output4f = vec4(v_color3f * SKY_BRIGHTNESS + intensity * u_sunColor3f, 0.0);
|
||||
#endif
|
||||
#ifdef COMPILE_CLOUDS
|
||||
|
@ -33,8 +33,6 @@ uniform mat4 u_inverseProjectionMatrix4f;
|
||||
|
||||
uniform mat2 u_randomizerDataMatrix2f;
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
const vec3 ssaoKernel[8] = vec3[](
|
||||
vec3(0.599,0.721,0.350),vec3(0.114,0.791,0.601),
|
||||
vec3(0.067,0.995,0.069),vec3(0.511,-0.510,0.692),
|
||||
@ -50,8 +48,8 @@ vec3(0.716,-0.439,0.543),vec3(-0.400,0.733,0.550));
|
||||
tmpVec4_2.zw = matProjInv2f * vec4(tmpVec4_2.xy, textureLod(u_gbufferDepthTexture, tmpVec4_2.xy * 0.5 + 0.5, 0.0).r * 2.0 - 1.0, 1.0);\
|
||||
tmpVec4_2.z /= tmpVec4_2.w;\
|
||||
tmpVec4_2.x = smoothstep(0.0, 1.0, radius * 0.5 / abs(pos.z - tmpVec4_2.z));\
|
||||
divisor += COMPARE_GT_0_1(tmpVec4_2.x, 0.0);\
|
||||
occlusion += COMPARE_GT_0_1(tmpVec4_2.z, tmpVec4_1.z) * tmpVec4_2.x;
|
||||
divisor += tmpVec4_2.x > 0.0 ? 1.0 : 0.0;\
|
||||
occlusion += (tmpVec4_2.z >= tmpVec4_1.z ? 1.0 : 0.0) * tmpVec4_2.x;
|
||||
|
||||
void main() {
|
||||
vec3 originalClipSpacePos = vec3(v_position2f, textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r);
|
||||
|
@ -48,8 +48,6 @@ uniform mat4 u_sunShadowMatrixLOD24f;
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/branchless_comparison.glsl"
|
||||
|
||||
const vec2 POISSON_DISK[4] = vec2[](
|
||||
vec2(0.998, -0.0438),
|
||||
vec2(-0.345, -0.933),
|
||||
@ -96,7 +94,7 @@ void main() {
|
||||
return;
|
||||
}
|
||||
float material1f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).a;
|
||||
material1f = 2.0 * material1f - COMPARE_GT_0_1(material1f, 0.5);
|
||||
material1f = 2.0 * material1f - step(0.5, material1f);
|
||||
if(material1f < 0.05) {
|
||||
return;
|
||||
}
|
||||
|
@ -47,21 +47,17 @@ void main() {
|
||||
discard;
|
||||
}
|
||||
|
||||
vec4 light;
|
||||
vec4 dlight;
|
||||
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;
|
||||
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(light.w - len, 0.0);
|
||||
dlight = u_dynamicLightArray[i];
|
||||
dlight.xyz = dlight.xyz - worldPosition4f.xyz;
|
||||
blockLight = max((dlight.w - length(dlight.xyz)) * 0.066667, blockLight);
|
||||
}
|
||||
blockLight = min(blockLight + diffuse * 0.066667, 1.0);
|
||||
}
|
||||
|
||||
color *= texture(u_lightmapTexture, vec2(blockLight, v_lightmap2f.y));
|
||||
|
@ -146,25 +146,21 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
float diffuse = 0.0;
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
float blockLight = v_lightmap2f.x;
|
||||
#else
|
||||
float blockLight = u_textureCoords02.x;
|
||||
#endif
|
||||
float len;
|
||||
vec4 light;
|
||||
vec4 dlight;
|
||||
if(u_dynamicLightCount1i > 0) {
|
||||
vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
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(light.w - len, 0.0);
|
||||
dlight = u_dynamicLightArray[i];
|
||||
dlight.xyz = dlight.xyz - worldPosition4f.xyz;
|
||||
blockLight = max((dlight.w - length(dlight.xyz)) * 0.066667, blockLight);
|
||||
}
|
||||
blockLight = min(blockLight + diffuse * 0.066667, 1.0);
|
||||
}
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
color *= texture(u_samplerLightmap, vec2(blockLight, v_lightmap2f.y));
|
||||
@ -190,12 +186,8 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||
#ifndef COMPILE_ENABLE_LIGHTMAP
|
||||
vec4 light;
|
||||
float diffuse = 0.0;
|
||||
#else
|
||||
diffuse = 0.0;
|
||||
#endif
|
||||
for(int i = 0; i < u_lightsEnabled1i; ++i) {
|
||||
light = u_lightsDirections4fv[i];
|
||||
diffuse += max(dot(light.xyz, normal), 0.0) * light.w;
|
||||
|
BIN
sources/resources/assets/eagler/silence_loop.wav
Normal file
BIN
sources/resources/assets/eagler/silence_loop.wav
Normal file
Binary file not shown.
Reference in New Issue
Block a user