-0.0...1.0 tartományba eső float be- és kicsomagolása rgba-ba
glsl:
asm:
glsl:
asm:
-mélység tárolása lineárisan 0.0....1.0 tartományban
glsl:
asm:
glsl:
vec4 packFloatToVec4i(const float value)
{
const vec4 bitSh = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0);
const vec4 bitMsk = vec4(0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);
vec4 res = fract(value * bitSh);
res -= res.xxyz * bitMsk;
return res;
}
asm:
PARAM bitShift={256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0};
PARAM bitMask={0.0, -1.0 / 256.0, -1.0 / 256.0, -1.0 / 256.0};
MUL res, value, bitShift;
FRC res, res;
MAD res, res.xxyz, bitMask, res;
glsl:
float unpackFloatFromVec4i(const vec4 value)
{
const vec4 bitSh = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);
return(dot(value, bitSh));
}
asm:
PARAM bitShift={1.0/ (256.0 * 256.0 * 256.0), 1.0/(256.0 * 256.0), 1.0/256.0, 1.0};
DP4 res, value, bitShift;
-mélység tárolása lineárisan 0.0....1.0 tartományban
glsl:
void main()
{
vec4 viewPos = gl_ModelViewMatrix * gl_Vertex; // this will transform the vertex into eyespace
depth = (-viewPos.z-near)/(far-near); // will map near..far to 0..1
gl_Position = ftransform();
}
asm:
DP4 viewPos, state.matrix.modelview[2];
ADD depth, viewPos.z, NEAR;
MUL depth, depth, MINUS_FAR_MINUS_NEAR_INV;