|
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
1.8.6