gKit2 light
|
un ensemble de fonctions. openGL est utilisable à travers un ensemble de fonctions C, ce qui signifie, pas de surchage, mais une famille de fonctions, des types opaques, pas d'objet, mais des identifiants.
une interface C++ pourrait ressembler à ça :
tout est explicite, on connait le contexte, le buffer, etc.
la version C pur pourrait ressembler à ça :
tout est explicite, mais un peu plus long à écrire.
l'interface d'openGL utilise une convention différente : au lieu de rendre explicite l'objet / la structure manipulée, elle est d'abord "sélectionnée" pour une opération particulière, puis manipulée implicitement :
ce qui permet d'obtenir une syntaxe compacte, mais peut être source de nombreuses erreurs, si l'on n'y prête pas attention.
autre détail important, il n'y a pas de surchage en C, on ne peut écrire ça pour modifier la valeur d'un paramètre de shader :
ni ça :
mais plutot ça :
chaque surcharge est nommée explicitement, puisque seul le nom de la fonction est utilisé. selon le type de valeur à manipuler, les noms de fonctions sont décorés par un suffixe indiquant le nombre de paramètres (1, 2, 3, ou 4) et leur type (f pour float, i pour int, u pour unsigned int, v pour vector, un pointeur sur une ou plusieurs valeurs, etc.)
pour dessiner, il faut en général créer plusieurs types d'objets openGL, la démarche est toujours la même :
GLuint
, cf la famille de fonctions glGenXXX( ),exemple, pour créer plusieurs buffers openGL, cf glGenBuffers( )
:
pour créer un seul buffer, il suffit de passer le pointeur sur l'identifiant :
le buffer sera ensuite sélectionné avec glBindBuffer( )
. cf configurer un format de sommet, vertex array object pour plus de détails sur l'utilisation des buffers.
le vao sera ensuite sélectionné avec glBindVertexArray( )
. cf configurer un format de sommet, vertex array object pour plus de détails.
la texture sera ensuite sélectionnée avec glBindTexture( )
, cf textures, samplers et pipeline.
les shaders et les programs sont un peu à part, leur fonction de création ne crée qu'un seul objet à la fois :
le program sera sélectionné avec glUseProgram( )
. cf compiler et linker un shader program pour les détails.
l'api complète et sa documentation est consultable sur opengl.org