const de división en tiempo de compilación de glsl

¿Este código GLSL creará constantes de tiempo de compilación a partir de "oneSixth" y "twoThirds"?

// GLSL TESSELLATION EVALUATION SHADER
#version 410

layout (isolines, equal_spacing) in;
in vec4 tessColor[];
out vec4 pointColor;

const float oneSixth = 1. / 6.;
const float twoThirds = 2. / 3.;

void main ()
{
    float s2 = gl_TessCoord.s * gl_TessCoord.s;
    float s3 = s2 * gl_TessCoord.s;
    float w0 = oneSixth - .5 * gl_TessCoord.s + .5 * s2 - oneSixth * s3;
    float w1 = twoThirds - s2 + .5 * s3;
    float w2 = oneSixth + .5 * gl_TessCoord.s + .5 * s2 - .5 * s3;
    float w3 = oneSixth * s3;

    gl_Position = w0 * gl_in[0].gl_Position + w1 * gl_in[1].gl_Position +
            w2 * gl_in[2].gl_Position + w3 * gl_in[3].gl_Position;
    pointColor = w0 * tessColor[0] + w1 * tessColor[1] +
            w2 * tessColor[2] + w3 * tessColor[3];
}

Un colega mío piensa que este código es ineficiente y dice que debería codificar la división o sucederá en tiempo de ejecución.

const float oneSixth = .1666666667;
const float twoThirds = .6666666667;

Soy nuevo en GLSL pero soy escéptico de que esto sea necesario. ¿Alguna idea? ¿Es dependiente del proveedor?

preguntado el 03 de mayo de 12 a las 16:05

2 Respuestas

Sucederá en tiempo de compilación. No es necesario codificar trivialidades como esta. Sin embargo, esto no se menciona en la especificación GLSL.

Respondido el 07 de junio de 12 a las 19:06

En caso de duda, mida, pero consideraría rota cualquier implementación que no hiciera esto en tiempo de compilación.

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.