Consentitemi di avere un'intestazione, ad esempio #include <GL/gl.h>
. Contiene sottoinsieme di funzioni API OpenGL. Ho bisogno di qualcosa di simile:Come verificare se la funzione è dichiarata nell'ambito globale al momento della compilazione
static_assert(has_glDrawArraysIndirect::value, "There is no glDrawArraysIndirect");
O ancora meglio:
PFNGLDRAWARRAYSINSTANCEDPROC ptr_glDrawArraysIndirect = ptr_to_glDrawArraysIndirect::ptr;
Dove ptr_to_glDrawArraysIndirect::ptr
srotola al puntatore a glDrawArraysIndirect se è definito o ad una funzione stub stub_glDrawArraysIndirect
altrimenti.
Il mio sistema operativo di destinazione è molto specifico. Qualsiasi soluzione basata su linker (come GetProcAddress
o dlsym
) non funziona per me, poiché non esiste un linker dinamico. Più del mio driver non fornisce glXGetProcAdrress
né wglGetProcAddress
, in pratica non esiste un modo per interrogare il puntatore in fase di esecuzione in base al nome della funzione (in realtà, voglio implementare un meccanismo del genere).
Qualche idea?
Se non esiste alcun collegamento dinamico, deve essere collegato staticamente. Quindi o la funzione esiste al momento della compilazione o no. E dal momento che sarà determinato dal contenuto di un header, puoi solo guardare attraverso quello. –
@Nicol Bolas: questo è quello che stavo facendo da molto tempo. Poiché il driver è in fase di sviluppo, sono stanco di aggiornare il mio codice. Voglio risolverlo una volta in generale. – ivaigult