Ho capito che Open GL ha bisogno di usare i numeri, ma perché non usare solo normali ints e float o le classi wrapper già esistenti (a prescindere da quale sia l'intero mondo di Open GL per adattarsi bene)? C'è una differenza oltre al nome e uno che viene utilizzato esclusivamente in Open GL o sono praticamente la stessa cosa con un nome diverso?Perché c'è GLint e GLfloat?
risposta
Perché un int è (cosa che semplifica eccessivamente qui) 32 bit su un sistema a 32 bit e 64 bit su un sistema a 64 bit - quindi anche solo "un int" non è un concetto universale. Tieni presente che l'hardware che esegue il codice grafico è un diverso componente hardware rispetto alla CPU e emerge la necessità di nuovi tipi. Usando il proprio typedef, OpenGL può garantire che il giusto numero di bit sia confezionato nel modo giusto quando si inviano i dati sulla scheda grafica.
Sarebbe possibile farlo con funzioni di conversione che astraggono il disordine di "diversi ints", ma che incorre in una penalizzazione delle prestazioni che generalmente non è accettabile quando si parla di ogni singolo numero che va da e verso la scheda grafica.
tl; dr quando si utilizza un "int", si sta scrivendo con l'hardware del processore in mente. Quando si utilizza un "GLInt", si sta pensando all'hardware della scheda grafica.
MODIFICA: come indicato nei commenti, su un processore a 64 bit, int
può (e probabilmente lo sarà) 32 bit per ragioni di compatibilità. Storicamente, attraverso hardware a 8, 16 e 32 bit, è stata la dimensione nativa del processore, ma tecnicamente, è qualsiasi cosa il compilatore si senta di usare quando crea il codice macchina. Puntelli su @Nicol Bolas e @Mark Dickinson
- 1. GLfloat o GLdouble di default?
- 2. Uso di GLshort invece di GLfloat per i vertici
- 3. Oggetto OpenGL lucido/lucido in Mac OS X 10.6, ma non 10.5. Perché?
- 4. Perché il mio colore scompare quando abilito l'illuminazione in OpenGL?
- 5. illuminazione OpenGL e splendente
- 6. In TDD, perché OpenEJB e perché Arquillian?
- 7. pid_t (e tipi simili) - perché, solo perché?
- 8. Quando smaltire e perché?
- 9. Perché WrappedMonad e WrappedArrow?
- 10. Stack e code, perché?
- 11. Perché booleano E bool
- 12. getElementById e null - perché?
- 13. VBO più lento del metodo obsoleto di disegno delle primitive - perché?
- 14. CGPoint a NSValue e invertire
- 15. File DLL e LIB: cosa e perché?
- 16. quando e perché utilizzare JumboEnumSet
- 17. RJS è cattivo e perché?
- 18. Devo usare FxCop e perché?
- 19. Perché e quando usare __noop?
- 20. Perché bool.TrueString e bool.FalseString esistono?
- 21. Perché `-1 * x` più veloce di` -x` e perché?
- 22. Perché SortedList e List usano array e perché LinkList non è molto usato?
- 23. Istruzione non valida durante la programmazione di C++ su Linux
- 24. parametro formale con __declspec (allineare ('16')), non sarà allineato
- 25. Perché glReadPixels() non funziona in questo codice in iOS 6.0?
- 26. OpenGL EXC_BAD_ACCESS quando si chiama glDrawElements in Swift ma non in Objective-C
- 27. Perché abbiamo contiene (oggetto o) invece di contenere (E e)?
- 28. Lingue e macchine virtuali: funzionalità difficili da ottimizzare e perché
- 29. Perché + e * valutano rispettivamente a 0 e a 1?
- 30. Perché scrivere "a" e "punto" nell'e-mail anziché "@" e "."?
"int è (cosa che può semplificare eccessivamente qui) 32 bit su un sistema a 32 bit e 64 bit su un sistema a 64 bit" Nota: questo non è necessariamente corretto. Il compilatore decide quanto è grande 'int'. Potrebbe * essere 32 bit su un sistema a 64 bit. Potrebbe non farlo. –
@NicolBolas: +1. In effetti, trovo difficile pensare a * qualsiasi * sistema a 64 bit dove un int è a 64 bit. Tutti i sistemi comuni che conosco hanno intesti a 32 bit. Almeno, se stiamo parlando di Ints C/C++, cioè. Mi sembra di ricordare che alcuni antichi Crays avevano degli inserti a 64 bit. –
Sapete, questo è vero, grazie per i commenti - stavo pensando ad un int come la "dimensione nativa indirizzabile", avendo trascorso qualche tempo in embedded recentemente, ma risulta che int era 16 bit su un processore a 16 bit, 32 su un 32 bit e ... 32 su un 64 bit. È stato mantenuto come 32 bit per ragioni di compatibilità. Ho appena verificato questo sul mio MBP x86. Ciò evidenzia che un int può essere qualsiasi cosa desideri dal compilatore, rafforzando l'argomento che richiede che un tipo robusto si adatti all'hardware della scheda grafica, ma merita commenti e modifiche. Bel lavoro! – Matt