2012-09-07 13 views
7

Entiendo que Open GL necesita usar números, pero ¿por qué no usar solo ints y flotantes regulares o las clases de contenedor ya existentes (lo que sea necesario para que todo el mundo de Open GL encaje bien)? ¿Hay una diferencia además del nombre y una que se usa exclusivamente en Open GL o son más o menos lo mismo con un nombre diferente?¿Por qué hay GLint y GLfloat?

Respuesta

19

Porque una int es (simplificando aquí excesivamente) 32 bits en un sistema de 32 bits y 64 bits en un sistema de 64 bits, por lo que incluso solo "un int" no es un concepto universal. Tenga en cuenta que el hardware que ejecuta el código de gráficos es , una pieza de hardware diferente a su CPU, y surge la necesidad de nuevos tipos. Al usar su propio typedef, OpenGL puede garantizar que la cantidad correcta de bits se empaquetan de la manera correcta al enviar los datos a su tarjeta gráfica.

Sería posible hacer esto con las funciones de conversión que abstraen el desorden de "diferentes datos", pero que incurriría en una penalización de rendimiento que generalmente no es aceptable cuando se habla de cada número que va desde y hacia la tarjeta gráfica

tl; dr cuando usa un "int", está escribiendo con el hardware de su procesador en mente. Cuando usa un "GLInt", está escribiendo con el hardware de su tarjeta gráfica en mente.

EDITAR: como se señala en los comentarios, en un procesador de 64 bits, int puede (y probablemente será) 32 bits por razones de compatibilidad. Históricamente, a través del hardware de 8, 16 y 32 bits, ha sido el tamaño nativo del procesador, pero técnicamente es lo que el compilador desea usar cuando crea el código de máquina. Apoyos a @Nicol Bolas y @Mark Dickinson

+4

"int es (simplificando excesivamente aquí) 32 bits en un sistema de 32 bits y 64 bits en un sistema de 64 bits" Nota: esto no es necesariamente correcto. El compilador decide qué tan grande es 'int'. * Puede * ser de 32 bits en un sistema de 64 bits. Puede que no. –

+1

@NicolBolas: +1. De hecho, me resulta difícil pensar en * cualquier * sistema de 64 bits donde un int es de 64 bits. Todos los sistemas comunes que conozco tienen entradas de 32 bits. Al menos, si estamos hablando de C/C++ ints, eso es. Me parece recordar que algunos antiguos Crays tenían 64 bits. –

+1

Ya sabes, esto es cierto, gracias por los comentarios. Estaba pensando en un int como el "tamaño nativo direccionable", después de haber pasado algún tiempo en incrustado recientemente, pero resulta que int era de 16 bits en un procesador de 16 bits, 32 en 32 bit, y ... 32 en 64 bit. Se mantuvo como 32 bits por razones de compatibilidad. Acabo de verificar esto en mi x86 MBP. Esto resalta que un int puede ser lo que el compilador quiera que sea, lo que refuerza el argumento de que se necesita un tipo robusto para el hardware de la tarjeta gráfica, pero merece comentarios y edición. ¡Buen trabajo! – Matt

Cuestiones relacionadas