PDA

View Full Version : [OpenGL] domandina veloce e secca


Freaxxx
31-03-2011, 16:45
Non mi è chiara una cosa: insieme ad i driver di una scheda video cosa viene fornito che riguarda l'OpenGL?

ok, l'OpenGL gira anche per via software, quando il venditore di una scheda video/acceleratore grafico ti fornisce il pacchetto dei driver per l'accelerazione via hardware, dentro cosa mette? header? librerie? interprete?

continuo a cercare ma una risposta secca non la trovo.

Tommo
31-03-2011, 17:24
L'opengl che trovi nei driver è un'implementazione di openGL stessa tramite chiamate al driver sottostante, per quello la fornisce il produttore della scheda video.

Ci stanno 4 "enti" che fanno il software stack: (nomi esempio)

-Khronos decide l'interfaccia
-Microsoft seguendo l'interfaccia sviluppa il supporto lato SO (wgl, etc)
-Nvidia o AMD scrivono l'interfaccia tra l'interfaccia tra OS e il driver (dentro c'è l'implementazione vera e propria delle chiamate, il compilatore degli shader, etc).
-Nvidia o AMD (o indiani random) scrivono il driver

E poi la gente si chiede com'è che DX funziona meglio :D

Freaxxx
31-03-2011, 17:32
L'opengl che trovi nei driver è un'implementazione di openGL stessa tramite chiamate al driver sottostante, per quello la fornisce il produttore della scheda video.

Ci stanno 4 "enti" che fanno il software stack: (nomi esempio)

-Khronos decide l'interfaccia
-Microsoft implementa l'interfaccia e l'interazione driver-opengl-os (wgl, etc)
-Nvidia scrive l'interfaccia tra l'interfaccia OS e il driver
-Nvidia scrive il driver

E poi la gente si chiede com'è che DX funziona meglio :D

ok, ecco perché molte cose non mi tornavano, in più se ci mettiamo pure le varianti tra linux, windows e mac, stavo fresco a capirlo da solo :D

quindi io se programmo usando le OpenGL sfrutto degli header per interfacciarmi con le librerie suddette, ora arriva il bello:

gli header sono forniti da chi?
la libreria è fornita da chi?

mettiamo che io programmo con una Nvidia, come rispondo?

quando genero un eseguibile, quell'eseguibile si presuppone valido per tutti i sistemi operativi compatibili per quella compilazione oppure in realtà sono incluse nella compilazione le librerie Nvidia inserite staticamente nell'eseguibile e sono poi magari i driver di una ATI a tradurre da Nvidia ad istruzioni ATI?

facendo l'ultima domanda per complicare di più il ragionamento: GLUT e freeGLUT sono wrapper? che cosa sono?

Tommo
31-03-2011, 18:13
Allora gli header sono forniti da Khronos, infatti quelli sono tutti uguali. Su windows puoi trovarli sia negli include di sistema sia nello SDK dei driver.

La libreria inteso come codice binario eseguibile invece è parte del driver (su invidia è nvogl32.dll ad esempio).
L'interfaccia comune serve proprio a far si che in sistemi che hanno lo stesso protocollo di linking dinamico, lo stesso .exe possa "legarsi" a diverse implementazioni (Nvidia, AMD, Intel...).

glu è una roba header only che si appoggia solo a opengl, invece glut ha un'interfaccia comune a tutti i SO ma poi l'implementazione varia (si deve interfacciare all'input, al window server, etc).

Freaxxx
31-03-2011, 18:23
Allora gli header sono forniti da Khronos, infatti quelli sono tutti uguali. Su windows puoi trovarli sia negli include di sistema sia nello SDK dei driver.

La libreria inteso come codice binario eseguibile invece è parte del driver (su invidia è nvogl32.dll ad esempio).
L'interfaccia comune serve proprio a far si che in sistemi che hanno lo stesso protocollo di linking dinamico, lo stesso .exe possa "legarsi" a diverse implementazioni (Nvidia, AMD, Intel...).

glu è una roba header only che si appoggia solo a opengl, invece glut ha un'interfaccia comune a tutti i SO ma poi l'implementazione varia (si deve interfacciare all'input, al window server, etc).

domanda banale che viene spontanea: appurato che le librerie OpenGL si collegano dinamicamente, come fa l'oggetto binario o eseguibile a capire che lui deve prendersi proprio quella dll e non un altra?

Alla fine io programmatore, delle dll o delle altre librerie non me ne curo, mi basta sapere a che serve e che fa la X funzione e per me il programma va, ma come viene implementata la chiamata tra quell'exe che ho banalmente compilato per tutti i windows a 32 bit e il sistema operativo/scheda video?

Inoltre per le OpenGL si pone il problema che io in realtà non so a priori come si chiamano le librerie, perché Intel le chiamerà in un modo, Nvidia in un altro, e così via, e però il programma gira comunque.

Tommo
31-03-2011, 19:43
E quello è precisamente il lavoro del sistema operativo :D
Cioè gestire le risorse e farle usare ai vari programmi senza che si pestino i piedi.