2016-10-13 1 views
0

Ich hatte den Eindruck, wenn Sie Ihre Sampleruniformen auf die richtige Textureinheit einstellen, ist es egal, ob das aktuell gebundene Texturziel 0 ist oder nicht. Zum BeispielIst eine Textur erforderlich, um an die Stichprobe gebunden zu werden?

glActiveTexture(GL_TEXTURE1); 
glGenTextures(1, &mytexture); 

glBindTexture(GL_TEXTURE_2D, mytexture); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, my_data); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glBindTexture(GL_TEXTURE_2D, 0); // This is the line I'm wondering about 

später irgendwann beim Zeichnen ...

glUniform1i(glGetUniformLocation(program, "mysampler"), 1); 
//draw_stuff 

Leider ist der Bildschirm ganz schwarz ist, wenn ich nicht halten GL_TEXTURE_2D mytexture gebunden. Ist es illegal, wenn GL_TEXTURE_2D an 0 gebunden ist ???

+0

Ja, Sie müssen eine Textur binden (außer Sie verwenden die bindless Texture-Erweiterung). – datenwolf

+0

Kleiner Tipp: Wenn Ihre Zielversion 4.5 ist oder Sie Unterstützung für 'GL_ARB_direct_state_access' haben, sollten Sie' glCreateTextures', 'glBindTextureUnit' und' glTextureParameter' anstelle des Ansatzes "bind to modify" verwenden. Gleicher Effekt, weniger Anrufe und weniger Risiko einer Manipulation des Pipeline- und Objektstatus. – thokra

Antwort

4

Genau, denken Sie an GL_TEXTUREN als ein Slot von mehreren Texturzieltypen (GL_TEXTURE_2D, GL_TEXTURE_3D usw.). Während du GL_TEXTURE1 aktivierst und eine Textur an GL_TEXTURE_2D bindest, sagst du dem Treiber, dass 2d Textur in Slot 1 auf "mytexture" gesetzt wird.

Dann müssen Sie diese Informationen, um Ihre Shader passieren auch:

glUniform1i(glGetUniformLocation(program, "mysampler"), 1); 

Dieses einfach Ihre sampler2D in Ihrem Shader sagt, dass es für GL_TEXTURE_2D in Steckplatz aussehen sollte 1. Wenn Sie die Textur unbind wird es haben nichts zu probieren.

Verwandte Themen