FOUnd a working path for gl41

This commit is contained in:
Sam Gateau 2018-10-01 22:50:29 -07:00
parent d1d4920c35
commit c95c736b1f
2 changed files with 20 additions and 9 deletions

View file

@ -37,16 +37,11 @@ vec3 unpackSnorm3x10_1x2(int packedValue) {
#if defined(GPU_GL410)
layout(binding=0) uniform samplerBuffer blendshapeOffsetsBuffer;
vec2 gpu_unpackHalf2x16(uint packedValue) {
return unpackHalf2x16(packedValue);
}
BlendshapeOffset getBlendshapeOffset(int i) {
vec4 fetched = texelFetch(blendshapeOffsetsBuffer, i);
uvec4 elem_packed = uvec4(floatBitsToUint(fetched.x), floatBitsToUint(fetched.y), floatBitsToUint(fetched.z), floatBitsToUint(fetched.w));
uvec4 elem_packed = floatBitsToUint(texelFetch(blendshapeOffsetsBuffer, i));
BlendshapeOffset unpacked;
unpacked.position = vec3(gpu_unpackHalf2x16((elem_packed.x)), gpu_unpackHalf2x16(uint(elem_packed.y)).x);
unpacked.position = unpackSnorm3x10_1x2(int(elem_packed.y)).xyz * uintBitsToFloat(elem_packed.x);
<@if USE_NORMAL@>
unpacked.normal = unpackSnorm3x10_1x2(int(elem_packed.z)).xyz;
<@endif@>

View file

@ -1687,13 +1687,29 @@ void Blender::run() {
auto unpacked = unpackedBlendshapeOffsets.data() + range.begin();
auto packed = meshBlendshapeOffsets + range.begin();
for (auto j = range.begin(); j < range.end(); j++) {
#ifdef Q_OS_MAC
float len = glm::compMax(glm::abs(unpacked->positionOffsetAndSpare));
if (len > 1.0f) {
unpacked->positionOffsetAndSpare /= len;
} else {
len = 1.0f;
}
(*packed).packedPosNorTan = glm::uvec4(
glm::floatBitsToUint(len),
glm::packSnorm3x10_1x2(glm::vec4(unpacked->positionOffsetAndSpare, 0.0f)),
glm::packSnorm3x10_1x2(glm::vec4(unpacked->normalOffsetAndSpare, 0.0f)),
glm::packSnorm3x10_1x2(glm::vec4(unpacked->tangentOffsetAndSpare, 0.0f))
);
#else
(*packed).packedPosNorTan = glm::uvec4(
glm::packHalf2x16(glm::vec2(unpacked->positionOffsetAndSpare)),
glm::packHalf2x16(glm::vec2(unpacked->positionOffsetAndSpare.z, 0.0f)),
glm::packSnorm3x10_1x2(glm::vec4(unpacked->normalOffsetAndSpare, 0.0f)),
glm::packSnorm3x10_1x2(glm::vec4(unpacked->tangentOffsetAndSpare, 0.0f))
);
#endif
unpacked++;
packed++;
}