2012-02-23 36 views
6

Hay un tipo bool para las variables de sombreado que me gustaría usar, pero no pude encontrar el tamaño que tiene. Esto es importante porque cuando la creación de vértice atributo puntero especifico el tipo de datos que puede serCuál es el tamaño de booleano GLSL

GL_BYTE, 
GL_UNSIGNED_BYTE, 
GL_SHORT, 
GL_UNSIGNED_SHORT, 
GL_INT, 
GL_UNSIGNED_INT, 
GL_FLOAT, or 
GL_DOUBLE 

en C++ por lo general bool deben tener el mismo tamaño que 4 bytes int, pero puedo suponer lo mismo para GLSL o lo hace tener solo 1 byte?

+1

Estoy bastante seguro de que bool suele ser de solo 1 byte en C++ (al menos su implementación está definida), pero estoy preparado para demostrar lo contrario. –

+0

@ChristianRau Bueno, busqué en la web y tienes razón, incluso sizeof regresa 1. No recuerdo de dónde obtuve eso ... – Raven

+2

Lo único que puedes decir es que es 'sizeof (bool)'. Christian tiene razón, está definido por la implementación e incluso puede depender de la configuración del compilador. – MSalters

Respuesta

11

Esto es importante porque cuando la creación de vértice atributo puntero especifico el tipo de datos que puede ser

Es irrelevante, ya vértice atributos no pueden ser booleanos. De la especificación GLSL 3.30:

Las entradas del sombreado vértice solo pueden ser vectores flotantes, de coma flotante, matrices, enteros con y sin signo y vectores enteros. Las entradas de sombreado vértice también pueden formar matrices de estos tipos, pero no estructuras.

Booleanos no están en esa lista.

Sin embargo, si usted quiere saber cuál es el tamaño de un GLSL bool es en términos de uniform blocks, que tiene el mismo tamaño que uint: 32-bits.

+0

entonces todos esos tipos (excepto el doble que es de GL 4.0) eventualmente se expanden a 4 bytes, y son relevantes solo para el lado del cliente? – Raven

+1

@Raven: Esos son los tipos GLSL de las entradas del sombreador de vértices. Lo que les pasa como valores de atributo en muchos casos depende de usted; OpenGL tiene amplia libertad para convertir datos según sea necesario. No tiene que pasar enteros de 32 bits; puede usar enteros de 8 bits si lo desea. Puede pasar atributos enteros normalizados a entradas de coma flotante. Etcétera. –

Cuestiones relacionadas