2009-11-16 6 views

Répondre

5

Selon ce que vous essayez d'atteindre et quel est votre état actuel des connaissances, vous pouvez prendre différentes approches.

Si vous essayez d'apprendre OpenGL 2.0 tout en apprenant aussi GLSL, je suggère d'obtenir le Red book et le Orange book comme ensemble, car ils vont de pair.

Si vous voulez un guide moins complet qui vous permettra de commencer, consultez le OpenGL bible.

Si j'ai mal compris votre question et que vous connaissez déjà OpenGL, et que vous voulez en savoir plus sur GLSL en particulier, voici un bon exemple de phong shading qui montre les bases.

Compiler une source de shaders est vraiment simple,

D'abord, vous devez allouer une fente de shaders pour votre source, tout comme vous allouez une texture, en utilisant glCreateShader:

GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER); 
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER); 

Après cela, vous devez chargez votre code source en quelque sorte. Puisque c'est vraiment une solution dépendante de la plateforme, c'est à vous de décider.

Après avoir obtenu la source, vous définissez à l'aide glShaderSource:

glShaderSource(vtxShader, 1, &vsSource, 0); 
glShaderSource(pxlShader, 1, &psSource, 0); 

Ensuite, vous compilez vos sources avec glCompileShader:

glCompileShader(vtxShader); 
glCompileShader(pxlShader); 

Lien les shaders à l'autre, d'abord allouer un programme à l'aide glCreateProgram , attachez les shaders dans le programme en utilisant glAttachShader, et les lier en utilisant glLinkProgram:

GLuint shaderId = glCreateProgram(); 
glAttachShader(shaderId, vtxShader); 
glAttachShader(shaderId, pxlShader); 
glLinkProgram(shaderId); 

Puis, comme une texture, vous lier à l'étape de rendu actuel à l'aide glUseProgram:

glUseProgram(shaderId); 

Pour UNBIND, utilisez un id de 0 ou un autre ID de shaders.

Pour le nettoyage:

glDetachShader(shaderId, vtxShader); 
glDetachShader(shaderId, pxlShader); 

glDeleteShader(vtxShader); 
glDeleteShader(pxlShader); 

glDeleteProgram(shaderId); 

Et c'est la plupart du temps tout à elle, vous pouvez utiliser la famille de fonctions glUniform aux côtés de glGetUniform pour définir les paramètres aussi bien.