1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 09:36:43 +00:00

Switch to integer, uint not reliable in GLSL 120

This commit is contained in:
glassmancody.info 2021-03-27 23:52:05 -07:00
parent ec27e60284
commit 24454a1698

View file

@ -15,17 +15,17 @@ float quickstep(float x)
#if @useUBO #if @useUBO
const uint mask = uint(0xff); const int mask = int(0xff);
const uvec4 shift = uvec4(uint(0), uint(8), uint(16), uint(24)); const ivec4 shift = ivec4(int(0), int(8), int(16), int(24));
vec3 unpackRGB(uint data) vec3 unpackRGB(int data)
{ {
return vec3( (float(((data >> shift.x) & mask)) / 255.0) return vec3( (float(((data >> shift.x) & mask)) / 255.0)
,(float(((data >> shift.y) & mask)) / 255.0) ,(float(((data >> shift.y) & mask)) / 255.0)
,(float(((data >> shift.z) & mask)) / 255.0)); ,(float(((data >> shift.z) & mask)) / 255.0));
} }
vec4 unpackRGBA(uint data) vec4 unpackRGBA(int data)
{ {
return vec4( (float(((data >> shift.x) & mask)) / 255.0) return vec4( (float(((data >> shift.x) & mask)) / 255.0)
,(float(((data >> shift.y) & mask)) / 255.0) ,(float(((data >> shift.y) & mask)) / 255.0)
@ -35,7 +35,7 @@ vec4 unpackRGBA(uint data)
struct LightData struct LightData
{ {
uvec4 packedColors; // diffuse, ambient, specular ivec4 packedColors; // diffuse, ambient, specular
vec4 position; vec4 position;
vec4 attenuation; // constant, linear, quadratic, radius vec4 attenuation; // constant, linear, quadratic, radius
}; };
@ -73,7 +73,7 @@ void perLightSun(out vec3 ambientOut, out vec3 diffuseOut, vec3 viewPos, vec3 vi
vec3 lightDir = normalize(getLight[0].position.xyz); vec3 lightDir = normalize(getLight[0].position.xyz);
#if @lightingModel == LIGHTING_MODEL_SINGLE_UBO #if @lightingModel == LIGHTING_MODEL_SINGLE_UBO
uvec4 data = getLight[0].packedColors; ivec4 data = getLight[0].packedColors;
ambientOut = unpackRGB(data.y); ambientOut = unpackRGB(data.y);
vec3 sunDiffuse = unpackRGB(data.x); vec3 sunDiffuse = unpackRGB(data.x);
#else #else
@ -122,7 +122,7 @@ void perLightPoint(out vec3 ambientOut, out vec3 diffuseOut, int lightIndex, vec
#endif #endif
#if @useUBO #if @useUBO
uvec4 data = getLight[lightIndex].packedColors; ivec4 data = getLight[lightIndex].packedColors;
ambientOut = unpackRGB(data.y) * illumination; ambientOut = unpackRGB(data.y) * illumination;
#else #else
ambientOut = getLight[lightIndex].ambient.xyz * illumination; ambientOut = getLight[lightIndex].ambient.xyz * illumination;