2010-10-13 18 views
0

Je rencontre des problèmes pour essayer de charger une texture dans la mémoire VRAM. J'utilise OpenGL sur Mac OS X. J'ai une géométrie avec laquelle j'ai réussi le rendu en passant une couleur dans mon fragment shader. Cependant, dès que j'essaie de charger une texture, aucune géométrie n'est rendue et je ne peux voir que la couleur d'arrière-plan. Voici ma texture code de chargement:Aggravation de la texture OpenGL Problème

char imageData[27] = { 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
}; 

glActiveTexture(GL_TEXTURE0); 
GLuint textureID; 
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_2D, textureID); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 

GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture"); 
std::cout << uniform_location <<std::endl; 
glUniform1i(uniform_location, 0); 

glEnable(GL_TEXTURE_2D); 

Et voici mon code shader fragment:

uniform sampler2D texture; 

void main() 
{ 
    vec2 coord = vec2(0.5, 0.5); 

    //gl_FragColor = vec4(coord, 0.0, 1.0); 

    gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0); 
} 

Je réalise une partie de ce code est probablement pas nécessaire, mais je l'ai essayé tout ce que je peux penser .

Merci.

+1

BTW, vérifiez toujours les erreurs avec glGetError. Si vous avez une erreur, le rendu peut disparaître. – alxx

Répondre

3

La cause la plus probable est que le mipmapping n'est pas désactivé et que vous n'avez pas spécifié de niveaux de mipmapping. Donc, votre texture est incomplète.

Pour la désactiver sur cet objet de texture (à faire autour de l'appel glTexImage2D)

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

Vous ne réalisez cependant que « tout se décompose » ne vous aide pas du tout comprendre ce que vous voyez? En général, une capture d'écran vaut mille mots, mais en deçà, au moins décrire comment il échouerait aiderait.

+0

C'est exactement mon problème. Je ne peux pas croire que c'était aussi simple. Cela fait deux jours que je travaille à ça. Ce que je voulais dire ci-dessus est que la fenêtre de rendu n'affiche que la couleur de fond et rien d'autre, et je garderai votre suggestion à l'esprit la prochaine fois que je poserai une question. Oh, et vous voudrez peut-être éditer votre réponse pour avoir GL_TEXTURE_2D comme premier argument. Merci encore. – LandonSchropp

+0

@helixed: vous avez raison. terminé. – Bahbar

+0

@helixed: aussi, seule la couleur de fond est bizarre, car lorsque vous avez des textures incomplètes, vous devriez voir les polygones comme si la texture n'était pas activée. La couleur de fond était-elle noire? (c'est aussi une bonne idée de choisir une couleur de fond visiblement différente) – Bahbar