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
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
- 1. modos ARM y ¿por qué hay tantos?
- 2. ¿Por qué no hay List.skip y List.take?
- 3. ¿Por qué hay CL_DEVICE_MAX_WORK_GROUP_SIZE?
- 4. Uso de GLshort en lugar de GLfloat para los vértices
- 5. ¿Por qué hay imageCreateFrom * si hay imageCreateFromString?
- 6. ¿Por qué hay un NSInteger?
- 7. ¿Por qué no hay Dictionary.TrimExcess()?
- 8. ¿Por qué hay Synchsafe Integer?
- 9. ¿Por qué hay una pérdida de memoria y cómo solucionarlo?
- 10. En ASP.NET, ¿por qué hay UrlEncode() Y UrlPathEncode()?
- 11. ¿Por qué hay un nuevo especial y eliminar para matrices?
- 12. ¿Por qué hay una diferencia entre JavaScript y PHP timestamp?
- 13. ¿Por qué hay una pila y un montón?
- 14. Haskell: ¿Por qué no hay desajuste de tipo (y por qué compila esto)?
- 15. ¿Por qué no hay un documento.createHTMLNode()?
- 16. por qué no hay sizeof en java
- 17. ¿Por qué no hay un String # shift()?
- 18. ¿Por qué hay una eliminación [] en C++?
- 19. ¿Por qué no hay ReverseEnumerator en C#?
- 20. ¿Por qué no hay boost :: filesystem :: move_file?
- 21. ¿Por qué no hay impulso :: copy_on_write_ptr?
- 22. ¿Por qué hay @interface arriba @implementation?
- 23. ¿Por qué no hay método Service.onStop?
- 24. ¿Por qué hay módulos ficticios en sys.modules?
- 25. ¿Por qué hay una necesidad de Twisted?
- 26. ¿Por qué hay un glMatrixMode en OpenGL?
- 27. ¿Por qué no hay strtoi en stdlib.h?
- 28. ¿Por qué no hay isFocused() en GWT?
- 29. ¿Por qué no hay UTF-24?
- 30. ¿Por qué hay un código inalcanzable aquí?
"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. –
@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. –
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