Quelle est la signification des paramètres de glShaderSource?
J'ai essayé de mon mieux pour comprendre les fonctions d'OpenGL en profondeur, mais j'ai un problème avec glShaderSource
's paramètres:
void glShaderSource(
GLuint shader,
GLsizei count,
const GLchar * const * string,
const GLint * length);
Je suis un peu perdu sur les deux derniers paramètres. Que font-ils réellement dire en C++? Signifie-t-il, je lui donne un string, un const char ou un pointeur de chaîne si c'est encore possible? Et pourquoi?
Vous devez vous connecter pour publier un commentaire.
glShaderSource
attend deux séquences (C-style de tableaux) de valeurs.La première séquence est un tableau de C-strings, soit zéro terminée ou non.
La deuxième séquence est un tableau d'entiers, indiquant la longueur de chacune des chaînes de la première séquence. Cette séquence est facultatif si les chaînes sont égales à zéro terminée, comme la bibliothèque trouverez les longueurs par lui-même.
La GL-préfixés types sont en raison de la spécification OpenGL doit parler des types sans les lier lui-même dans une langue particulière, de sorte qu'il présente les alias de la commune de types C.
GLchar
est un type similaire au Cchar
, qui sert à représenter une étroite caractère.GLint
est un nombre entier signé de type, souvent utilisé pour représenter des poignées d'objet et les décalages.Il y a aussi d'autres comme
GLenum
etGLvoid
.GLchar const*
est l'OpenGL orthographe de lachar const*
type. En plus d'être utilisé pour pointer sur un seul personnage, il est couramment utilisé pour représenter une chaîne de caractères. Lorsque utilisé dans ce sens, il doit le signaler à une séquence de caractères se terminant par une sentinelle de la valeur'\0'
de savoir que la chaîne se termine.La raison pour faire
glShaderSource
prendre plus d'une corde est parce que OpenGL shader du compilateur a exposé le concept de fichier. Chacune de ces chaînes représente le contenu d'un fichier, et compiler comme si ces fichiers sont concaténées. Notez que cette fichier est en grande partie sans lien avec le système de fichiers chose du même nom.glShaderSource
traite uniquement avec les chaînes de caractères contenant le texte.C'est utile quand vous avez quelques fragments que vous souhaitez assembler dans le shader de source, comme si vous voulez ajouter un
#version
déclaration ou certaines communes préambule, ou ont mis en œuvre une sorte d'include de vous-même.Comme un exemple de comment l'utiliser:
Ici, nous sommes à la combinaison de trois chaînes pour OpenGL à considérer comme une grande partie du texte source. Notez que ma fonction de commodité
ReadTextFile
lit le contenu d'un système de fichiers un fichier dans une chaîne, aucune partie de OpenGL jamais touche le système de fichiers. Si vous voulez obtenir le contenu d'un fichier texte, un fichier image ou un fichier de maillage en OpenGL structures, vous avez besoin de le lire pour vous-même à l'avance.Nous allons passer par cette étape-par-étape:
const GLchar
est immuable (constante) de caractère.const GLchar *
est un pointeur vers immuableGLchar
s, dans ce cas, votre code source.const GLchar * const
est un immuable pointeur vers immuableGLchar
s, cela signifie que le pointeur lui-même ne peut pas être modifié pour pointer quelque part d'autre.const GLchar * const *
est un pointeur vers une immuable pointeur vers immuableGLchar
s.string
est juste le nom du paramètre.Qui signifie qu'il attend un pointeur vers un pointeur constant constant
GLchar
s. Vous pouvez l'utiliser comme (utiliser la valeur NULL pour la taille, pour laisserglShaderSource
figure sur les longueurs):Ou pour spécifier plus d'une seule source:
Je n'ai pas réellement testé le code ci-dessus et il peut y avoir certaines conversions nécessaires, mais il doit montrer comment il fonctionne selon le principe d'.