2012-09-07 6 views
7

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

19

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

+4

"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. –

+1

@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. –

+1

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

Problemi correlati