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 ???
Ja, Sie müssen eine Textur binden (außer Sie verwenden die bindless Texture-Erweiterung). – datenwolf
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