Inserisci Infobox

OpenGL e X Window

glxgears
Autore: HTC - Ultimo Aggiornamento: 2004-02-18 21:29:41 - Data di creazione: 2004-02-18 21:29:41
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Attraverso questo comando è possibile controllare effettivamente che il rendering OpenGL sia disponibile e funzioni correttamente. glxgears apre una finestra e attraverso OpenGL visualizza tre ingranaggi tridimensionali che ruotano, contemporaneamente stampa su stdout i frame per secondo.

glxgears [-info] [-display displayname]
-info Si ottengono alcune informazioni sull'implementazione di OpenGL
-display Si specifica il display sul quale mostrare la finestra  

Esempi:
[alberto@Apollo13 alberto]$ glxgears
1520 frames in 5.0 seconds = 304.000 FPS
1865 frames in 5.0 seconds = 373.000 FPS
...


[alberto@Apollo13 alberto]$ glxgears -info
Il dispositivo di Rendering
GL_RENDERER   = GeForce2 MX/AGP/3DNOW!
La versione di OpenGL
GL_VERSION    = 1.4.0 NVIDIA 43.49
Il fornitore del dispositivo di rendering e dei driver
GL_VENDOR     = NVIDIA Corporation
La lista delle estensioni OpenGL disponibili
GL_EXTENSIONS = GL_ARB_imaging GL_ARB_multitexture
...


[alberto@Apollo13 alberto]$ glxgears -display Apollo13:0
1860 frames in 5.0 seconds = 372.000 FPS
1865 frames in 5.0 seconds = 373.000 FPS
...

glxinfo
Autore: HTC - Ultimo Aggiornamento: 2004-02-18 21:31:33 - Data di creazione: 2004-02-18 21:31:33
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Comando per ottenere importanti informazioni riguardanti OpenGL, GLX e GLU e le loro estensioni.
Visualizza inoltre tutte le possibili combinazioni di attributi OpenGL (single o double buffer, dimensione dei buffer etc.) per creare un GLcontext.

glxinfo [-t] [-v] [-b] [-display displayname]
-t Visualizza le informazioni in un formato più leggibile senza preoccuparsi di rispettare gli 80 caratteri per riga
-v Rappresenta le informazioni la tabella delle possibili combinazioni in modo testuale
-l Visualizza alcuni limiti dell'implementazione OpenGL (GL_MAX_LIGHTS, GL_MAX_TEXTURE_SIZE etc.)
-i Segnala di non utilizzare il direct rendering
-display Specifica il display sul quale effettuare la query

glxinfo -t output
Autore: HTC - Ultimo Aggiornamento: 2004-02-18 21:36:20 - Data di creazione: 2004-02-18 21:36:20
Tipo Infobox: STDOUT - Skill: 3- INTERMEDIATE

Output del comando glxinfo in una macchina con scheda e driver NVIDIA comparato con un output dello stesso comando in una macchina con scheda Matrox e driver Mesa/DRI

Apollo13: Processore AMD e scheda video NVIDIA GeForce2

[alberto@Apollo13 alberto]$ glxinfo -t
Numero di display e screen del server X. Il numero di Display è utilizzato per identificare il Display su sistemi multiutente che forniscono operazioni grafiche differenti per ogni terminale, screen invece identifica lo schermo in caso che l'utente abbia disposizione più di un monitor (DualHead).
name of display: :0.0
display: :0  screen: 0

Indica la possibilità di rendering diretto
direct rendering: Yes

Il fornitore delle funzioni GLX - Server
server glx vendor string: NVIDIA Corporation
Versione delle funzioni GLX - Server
server glx version string: 1.3
Le estensioni supportate dalle funzioni GLX - Server
server glx extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer
Il fornitore delle funzioni GLX - Client
client glx vendor string: NVIDIA Corporation
Versione delle funzioni GLX - Client
client glx version string: 1.3
Le estensioni supportate dalle funzioni GLX - Client
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
    GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
    GLX_SGIX_swap_group, GLX_SGIX_swap_barrier, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_NV_float_buffer
GLX extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_ARB_get_proc_address

Il fornitore dei  driver OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer è il dispositivo di rendering, in questo caso un NVidia GeForce2, viene inoltre
individuato la presenza dell'AGP (Accelerated Graphics Port) e le estensioni 3DNOW! del processore AMD

OpenGL renderer string: GeForce2 MX/AGP/3DNOW!
La versione OpenGL supportata è la 1.4. 43.49 è la versione dei driver NVIDIA installati.
OpenGL version string: 1.4.0 NVIDIA 43.49
La lista delle estensioni OpenGL supportate
OpenGL extensions:
    GL_ARB_imaging, GL_ARB_multitexture, GL_ARB_point_parameters,
    GL_ARB_texture_compression, GL_ARB_texture_cube_map,
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat,
    GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object,
    GL_ARB_vertex_program, GL_ARB_window_pos, GL_S3_s3tc, GL_EXT_abgr,
    GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_minmax,
    GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
    GL_EXT_compiled_vertex_array, GL_EXT_draw_range_elements,
    GL_EXT_fog_coord, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels,
    GL_EXT_paletted_texture, GL_EXT_point_parameters, GL_EXT_rescale_normal,
    GL_EXT_secondary_color, GL_EXT_separate_specular_color,
    GL_EXT_shared_texture_palette, GL_EXT_stencil_wrap,
    GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod,
    GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_vertex_array,
    GL_IBM_texture_mirrored_repeat, GL_KTX_buffer_region, GL_NV_blend_square,
    GL_NV_fence, GL_NV_fog_distance, GL_NV_light_max_exponent,
    GL_NV_packed_depth_stencil, GL_NV_pixel_data_range, GL_NV_point_sprite,
    GL_NV_register_combiners, GL_NV_texgen_reflection,
    GL_NV_texture_env_combine4, GL_NV_texture_rectangle,
    GL_NV_vertex_array_range, GL_NV_vertex_array_range2, GL_NV_vertex_program,
    GL_NV_vertex_program1_1, GL_NVX_ycrcb, GL_SGIS_generate_mipmap,
    GL_SGIS_multitexture, GL_SGIS_texture_lod

La versione e le estensioni della libreria GLU
glu version: 1.3
glu extensions:
    GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

La tabella della modalità disponibili
Vis  Vis   Visual Trans  buff lev render DB ste  r   g   b   a  aux dep ste  accum buffers  MS   MS
ID Depth   Type  parent size el   type     reo sz  sz  sz  sz  buf th  ncl  r   g   b   a  num bufs
----------------------------------------------------------------------------------------------------
0x21 24 TrueColor    0     32  0  rgba   1   0   8   8   8   0   0   24  8  16  16  16  16   0   0
0x22 24 DirectColor  0     32  0  rgba   1   0   8   8   8   0   0   24  8  16  16  16  16   0   0
0x23 24 TrueColor    0     32  0  rgba   1   0   8   8   8   8   0   24  8  16  16  16  16   0   0
0x24 24 TrueColor    0     32  0  rgba   0   0   8   8   8   0   0   24  8  16  16  16  16   0   0
0x25 24 TrueColor    0     32  0  rgba   0   0   8   8   8   8   0   24  8  16  16  16  16   0   0
0x26 24 TrueColor    0     32  0  rgba   1   0   8   8   8   0   0   16  0  16  16  16  16   0   0
0x27 24 TrueColor    0     32  0  rgba   1   0   8   8   8   8   0   16  0  16  16  16  16   0   0
0x28 24 TrueColor    0     32  0  rgba   0   0   8   8   8   0   0   16  0  16  16  16  16   0   0
0x29 24 TrueColor    0     32  0  rgba   0   0   8   8   8   8   0   16  0  16  16  16  16   0   0
0x2a 24 TrueColor    0     32  0  rgba   1   0   8   8   8   0   0    0  0  16  16  16  16   0   0
0x2b 24 TrueColor    0     32  0  rgba   1   0   8   8   8   8   0    0  0  16  16  16  16   0   0
0x2c 24 TrueColor    0     32  0  rgba   0   0   8   8   8   0   0    0  0  16  16  16  16   0   0
0x2d 24 TrueColor    0     32  0  rgba   0   0   8   8   8   8   0    0  0  16  16  16  16   0   0
0x2e 24 DirectColor  0     32  0  rgba   1   0   8   8   8   8   0   24  8  16  16  16  16   0   0
0x2f 24 DirectColor  0     32  0  rgba   0   0   8   8   8   0   0   24  8  16  16  16  16   0   0
0x30 24 DirectColor  0     32  0  rgba   0   0   8   8   8   8   0   24  8  16  16  16  16   0   0
0x31 24 DirectColor  0     32  0  rgba   1   0   8   8   8   0   0   16  0  16  16  16  16   0   0
0x32 24 DirectColor  0     32  0  rgba   1   0   8   8   8   8   0   16  0  16  16  16  16   0   0
0x33 24 DirectColor  0     32  0  rgba   0   0   8   8   8   0   0   16  0  16  16  16  16   0   0
0x34 24 DirectColor  0     32  0  rgba   0   0   8   8   8   8   0   16  0  16  16  16  16   0   0
0x35 24 DirectColor  0     32  0  rgba   1   0   8   8   8   0   0    0  0  16  16  16  16   0   0
0x36 24 DirectColor  0     32  0  rgba   1   0   8   8   8   8   0    0  0  16  16  16  16   0   0
0x37 24 DirectColor  0     32  0  rgba   0   0   8   8   8   0   0    0  0  16  16  16  16   0   0
0x38 24 DirectColor  0     32  0  rgba   0   0   8   8   8   8   0    0  0  16  16  16  16   0   0


Enigma: Processore Intel PIII e scheda video Matrox G400
Si deve considerare che i driver sono quelli che sono stati installati insieme al sistema operativo (Linux RedHat 9.0) e non più aggiornati.

[alberto@Enigma alberto]$ glxinfo -t
Sono riportate solo le differenze con l'output precedente
[cut]
In questo caso il fornitore dei driver è la SGI
server glx vendor string: SGI
La versione GLX fornita è solo la 1.2
server glx version string: 1.2
Il numero di estensioni GLX client-server è minore
server glx extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
client glx vendor string: SGI
client glx version string: 1.2
client glx extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
GLX extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context

Per quanto riguarda OpenGL i driver sono forniti dalla VA Linux Systems, cioè si tratta dei driver DRI (Direct Rendering Infrastructure) integrati da XFree86
OpenGL vendor string: VA Linux Systems Inc.
L'implementazione OpenGL sulla macchina è data dai driver Mesa/DRI per la Matrox G400
E' riconosciuta la presenza dell'AGP e il processore della famiglia x86 con estensioni MMX (MultiMedia eXtension) e SSE (Streaming SIMD Extension)

OpenGL renderer string: Mesa DRI G400 20020221 AGP 1x x86/MMX/SSE
La versione OpenGL è la 1.2 mentre la versione Mesa è la 4.0.4
OpenGL version string: 1.2 Mesa 4.0.4
Estensioni supportate, decisamente minori rispetto al precedente esempio
OpenGL extensions:
    GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_texture_compression,
    GL_ARB_texture_env_add, GL_ARB_transpose_matrix, GL_EXT_abgr,
    GL_EXT_bgra, GL_EXT_clip_volume_hint, GL_EXT_compiled_vertex_array,
    GL_EXT_packed_pixels, GL_EXT_polygon_offset, GL_EXT_rescale_normal,
    GL_EXT_texture3D, GL_EXT_texture_env_add, GL_EXT_texture_object,
    GL_EXT_vertex_array, GL_IBM_rasterpos_clip, GL_MESA_window_pos,
    GL_NV_texgen_reflection, GL_SGIS_generate_mipmap

[cut]

Anche le combinazioni, soprattutto per quello che riguarda la dimensione dei buffer, sono limitate
Vis  Vis   Visual Trans  buff lev render DB ste  r   g   b   a  aux dep ste  accum buffers  MS   MS
ID Depth   Type  parent size el   type     reo sz  sz  sz  sz  buf th  ncl  r   g   b   a  num bufs
----------------------------------------------------------------------------------------------------
0x23 24 TrueColor    1     24  0  rgba   1   0   8   8   8   0   0    0  0   0   0   0   0   0   0
0x24 24 TrueColor    1     24  0  rgba   0   0   8   8   8   0   0    0  0   0   0   0   0   0   0
0x25 24 TrueColor    1     24  0  rgba   1   0   8   8   8   0   0   24  8   0   0   0   0   0   0
0x26 24 TrueColor    1     24  0  rgba   0   0   8   8   8   0   0   24  8   0   0   0   0   0   0
0x27 24 TrueColor    1     24  0  rgba   1   0   8   8   8   0   0    0  0  16  16  16   0   0   0
0x28 24 TrueColor    1     24  0  rgba   0   0   8   8   8   0   0    0  0  16  16  16   0   0   0
0x29 24 TrueColor    1     24  0  rgba   1   0   8   8   8   0   0   24  8  16  16  16   0   0   0
0x2a 24 TrueColor    1     24  0  rgba   0   0   8   8   8   0   0   24  8  16  16  16   0   0   0
0x2b 24 DirectColor  1     24  0  rgba   1   0   8   8   8   0   0    0  0   0   0   0   0   0   0
0x2c 24 DirectColor  1     24  0  rgba   0   0   8   8   8   0   0    0  0   0   0   0   0   0   0
0x2d 24 DirectColor  1     24  0  rgba   1   0   8   8   8   0   0   24  8   0   0   0   0   0   0
0x2e 24 DirectColor  1     24  0  rgba   0   0   8   8   8   0   0   24  8   0   0   0   0   0   0
0x2f 24 DirectColor  1     24  0  rgba   1   0   8   8   8   0   0    0  0  16  16  16   0   0   0
0x30 24 DirectColor  1     24  0  rgba   0   0   8   8   8   0   0    0  0  16  16  16   0   0   0
0x31 24 DirectColor  1     24  0  rgba   1   0   8   8   8   0   0   24  8  16  16  16   0   0   0
0x32 24 DirectColor  1     24  0  rgba   0   0   8   8   8   0   0   24  8  16  16  16   0   0   0

Estensioni GLX
Autore: HTC - Ultimo Aggiornamento: 2005-04-19 12:57:56 - Data di creazione: 2004-09-18 01:23:02
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

GLX sono le estensioni OpenGL del sistema X Window.
Come ogni altra estensione di X Window le GLX utilizzano il sistema di autenticazione e connessione di X e il flusso di comandi OpenGL tra il server e il client è incapsulato all'interno del protocollo di rete X Window.

Spesso per ragioni di performance oltre al procedimento tradizionale, che prende il nome di rendering indiretto, viene data la possibilità di ottenere l'accesso alla pipeline grafica evitando le operazioni di incapsulamento nel protocollo X. Questa soluzione viene denominata rendering diretto.

Elementi principali di GLX

GLX si basa su due principali entità, il Rendering Context e i GLXDrawables.
Il Rendering Context (RC) può essere considerato una astrazione della macchina a stati OpenGL, su di esso vengono effettuate tutte le operazioni di rendering da parte della libreria grafica. Il vantaggio di utilizzare un rendering context è quello di avere a disposizione un contesto virtuale indipendente dal sistema operativo o hardware sottostante.
Ci sono alcune limitazioni nell'utilizzo dei RC: un processo o thread non può avere più di un Rendering Context attivo in ogni momento e un dato Rendering Context non può essere attivo in più di un thread o processo alla volta.
Una nota importante quando ci si riferisce agli elementi di GLX è dato dall'address space, ovvero dalla spazio degli indirizzi nel quale un determinato oggetto è accessibile.
Un RC è composto da una parte server, la quale condivide alcuni informazioni con il server X come ad esempio il buffer attivo (in caso di double buffering) e il valore dei pixel nel X framebuffer, e da una parte client.
Normalmente quando si utilizza un rendering indiretto la sezione client è accessibile nell'address space del processo client mentre la sezione server lo è nello spazio di indirizzi del server X.
In questo modo una parte del RC (che può contenere diverse oggetti come le Display List e le Texture) sono disponibili per altri processi.
Al contrario, in caso di rendering diretto, entrambi le parti del RC sono disponibili nell'address space del client.
E' importante ricordare che il direct rendering è disponibile (sempre che l'implementazione OpenGL ne sia dotata) solo se il server X è sulla macchina locale, nel caso invece che la comunicazione client/server avvenga su rete l'incapsulazione dei comandi OpenGL nel X Byte Stream è inevitabile.

I GLXdrawables sono le superfici su cui è possibile disegnare e si distinguono in superfici di rendering onscreen e superfici di rendering offscreen.
Delle prime fanno parte le GLXWindow, ovvero aree rettangolari di pixel contenute nel framebuffer (nella memoria video), ogni GLXWindow è associata a una Window di X.
Le superfici di rendering offscreen sono invece le GLXPixmap e i GLXPBuffer, esse sono delle zone di memoria simili alle GLXWindow ma che non sono visibili a schermo.
I GLXPBuffer (come i WGL PBuffer per le piattaforme Windows) sono una innovazione abbastanza recente (supportate a partire dalla versione GLX 1.3) e si differenziano dalle GLXPixmap per il fatto di essere allocati nella zone non visibili del framebuffer.
Essendo contenuti nella memoria video le operazioni di rendering o di lettura sui PBuffer da parte della scheda grafica sono molto veloci rispetto alle operazioni analoghe sulle Pixmap mantenute nella RAM e quindi accessibili solo mediante BUS di sistema.

Configurazione del Frame Buffer

Per configurare il tipo di framebuffer da utilizzare per le operazioni di rendering OpenGL GLX mette a disposizione un set di funzioni che servono a manipolare e richiedere dei GLXFBConfig, oggetti che contengono la configurazione del buffer.
Attraverso questi oggetti è possibile selezionare le caratteristiche del FB che ci interessano e creare dei rendering context e dei drawables che rispettino le nostre richieste.

Associare rendering context e drawables

Per poter renderizzare con OpenGL è necessario associare il Rendering Context a un drawable, per farlo i due elementi devono essere compatibili, ovvero devono essere stati creati con lo stessa configurazione di GLXFBConfig.
Questo signifa che:

- Utilizzano lo stesso tipo di color buffer, RGBA o Index
- I buffer ausiliari (depth, stencil, accumulation etc.) sono configurati in modo identico

Infine sia il RC che il drawables devono far pare dello stesso X Screen ed appartenere allo stesso spazio di indirizzi (del client).
GLX permette di utilizzare un rendering context associato a più drawables oppure più rendering context (per esempio appartenenti a diversi thread) associati ad uno stesso drawable, a questo scopo i buffer ausiliari sono "attaccati" al drawable e non al RC in modo che le loro informazioni possano essere condivise tra i vari RC associati al drawable.
Purtroppo nonostante queste interessanti potenzialità il rendering parallelo su sistemi multiprocessore non è supportato dato che diversi RC non possono operare simultaneamente sullo stesso drawable.
Alcune implementazioni OpenGL, come quella di Sun per Solaris, sono MT-Safe (Multithread Safe) e garantiscono il rendering parallelo pagando però un prezzo in prestazioni.
Di fatto il consiglio è quello di utilizzare molteplici thread per il calcolo e per la gestione della GUI (comunicazione con X) ed un unico thread per il rendering OpenGL vero e proprio.

OpenGL ABI
Autore: HTC - Ultimo Aggiornamento: 2004-09-22 05:45:15 - Data di creazione: 2004-09-22 05:45:15
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

L'Application Binary Interface per la libreria OpenGL su sistemi Linux/X11.

L'OpenGL ABI è uno standard che si pone due principali obiettivi: il primo è definire delle convenzioni per stabilire l'ambiente runtime utilizzato dalle applicazioni OpenGL in collaborazione con X11 nei sistemi operativi Linux in modo da fornire una interfaccia comune indipendente dalla implementazione OpenGL presente sul sistema.
Il secondo obiettivo è definire l'ambiente di sviluppo per le applicazioni OpenGL, questo comprende la definizione del nome e della posizione dei file header, modalità di utilizzo delle estensioni etc.

Il vantaggio di avere una interfaccia comune per l'ambiente runtime è quella di poter far girare qualsiasi tipo di applicazioni, comprese quelle distribuite in binario (ad esempio prodotti commerciali closed source), su qualsiasi delle diverse implementazioni disponibili della libreria grafica.
L'OpenGL ABI è anche parte del <a href="http://www.linuxbase.org">LSB</a> (Linux Standard Base) ovvero un insieme di specifiche che si pongono come obiettivo lo standardizzazione di alcuni elementi tra le diverse distribuzioni Linux per facilitarne lo sviluppo.

L'ABI precisa che nel suo campo d'azione non rientrano:
- dettagli dell'implementazione interna di OpenGL
- standardizzazione su sistemi non Linux
- modifiche alle API OpenGL
- utilizzo delle OpenGL senza X11/GLX

Le sezioni principali della specifica:
Calling Conventions
La lista dei datatypes OpenGL (GLint, GLfloat etc.) con la loro descrizione e il loro equivalente in gcc su una architettura Intel a 32 bit.

Libraries
L'ABI prevede due librerie dinamiche, libGL e libGLU.
La prima include sia l'implementazione OpenGL che quella delle GLX e generalmente è strettamente dipendente dall'hardware sottostante e/o dall'X server, la seconda è la libreria di utility che utilizza esclusivamente le funzioni presenti nella libGL.

Vengono definiti i nomi dei link simbolici di entrambe le librerie:
libGL.so
libGLU.so
e i nomi runtime (DT_SONAME):
libGL.so.1
libGLU.so.1

Mantenendo separati i due nomi un eventuale update delle librerie runtime viene reso trasparente alle applicazione.
Entrambe le librerie devono essere posizionate in /usr/lib/.

Dato che OpenGL utilizza un sistema di sviluppo tramite estensioni è necessario specificare
una interfaccia che permetta di verificare la presenza o meno di tali estensioni durante l'esecuzione dell'applicazione.
A tale scopo è stata introdotta la seguente funzione:
void (*glXGetProcAddressARB(const GLubyte *))();
glXGetProcAddressARB prende come argomento il nome di una estensione e ritorna il puntatore alla relativa GL extension se questa è presenti altrimenti ritorna NULL.

Header Files
Sono definiti i seguenti header:
<GL/gl.h> - OpenGL
<GL/glu.h> - GLU
<GL/glx.h> - GLX
<GL/glext.h> - OpenGL Extension
<GL/glext.h> - GLX Extension
Questi file devono essere presenti in /usr/include/GL.

Extension Headers
Questa sezione tratta in modo più approfondito i file di header per le estensioni di OpenGL e di GLX specificando le convenzioni di identificazione delle estensioni, i metodi per il controllo delle versioni e per il supporto di implementazioni legacy.
Viene inoltre ricordato che gli extension headers vengono mantenuti in modo centralizzato dalla SGI (Silicon Graphics) insieme all'<a href="http://oss.sgi.com/projects/ogl-sample/registry/"></a>extension registry, cioè la lista di tutte le estensioni introdotte.

Lo stesso documento di specifica dell'ABI è mantenuto sul sito della SGI a <a href="http://oss.sgi.com/projects/ogl-sample/ABI/">questo indirizzo</a> e naturalmente ne consiglio la lettura per avere una visione più dettagliata delle varie sezioni e di alcune questioni ancora non completamente risolte.

Privacy Policy