Problem:glTexEnv kehrt inexplainable INVALID_OPERATION ERROR
Gleich nach dem "glTexEnvi (GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);" Ich habe den GL ERROR # 1282 (INVALID_OPERATION).
Dann, wenn ich die OpenGL 2.1 Referenz konsultierte, heißt es unter glTexEnv, dass: GL_INVALID_OPERATION generiert wird, wenn glTexEnv zwischen der Ausführung von glBegin und der entsprechenden Ausführung von glEnd ausgeführt wird. Aber das ist nicht mein Umstand, da ich Vertex-Array verwende.
Hier ist ein Teil meines Code:
void RBFS::render_pass1_point_sprites(Shader &shader1, int width, int height, float t)
{
shader1.bind();
glActiveTexture(GL_TEXTURE0);{
glBindTexture(GL_TEXTURE_1D, m_texRBFData[0]);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE1);{
glBindTexture(GL_TEXTURE_1D, m_texRBFData[1]);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE2);{
glBindTexture(GL_TEXTURE_3D, m_texSDF);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE3);{
glBindTexture(GL_TEXTURE_3D, m_texLabels[0]);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE4);{
glBindTexture(GL_TEXTURE_3D, m_texLabels[1]);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE5);{
glBindTexture(GL_TEXTURE_1D, m_texHG);
MyCheckErrorGL();
}
glActiveTexture(GL_TEXTURE9);{
glBindTexture(GL_TEXTURE_2D, m_texCircle);
MyCheckErrorGL();
}
// upload t
GLuint loc_t = my_glGetUniformLocation(shader1.id(), "tSlice");
glUniform1f(loc_t, t);
MyCheckErrorGL();
// SET POINT_SPRITE
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);// so we can set different point size in VShader
float sizes[2];
glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, sizes);
glPointParameterf(GL_POINT_SIZE_MIN, sizes[0]);
glPointParameterf(GL_POINT_SIZE_MAX, sizes[1]);
MyCheckErrorGL();
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);// means tex-coord iteration
MyCheckErrorGL();
glPointParameterfARB(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);// set origin-y
MyCheckErrorGL();
glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
MyCheckErrorGL();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_density);{
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, width, height);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glClearColor(0.0,0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
MyCheckErrorGL();
glDrawArrays(GL_POINTS, 0, numRBFs);//3rd parameter: number of points
MyCheckErrorGL();
glDisable(GL_BLEND);
glPopMatrix();
glPopAttrib();
}
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
// turn off switches for PSprite
glDisable(GL_POINT_SPRITE);
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
MyCheckErrorGL();
glActiveTexture(GL_TEXTURE9);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE5);
glBindTexture(GL_TEXTURE_1D, 0);
glActiveTexture(GL_TEXTURE4);
glBindTexture(GL_TEXTURE_3D, 0);
glActiveTexture(GL_TEXTURE3);
glBindTexture(GL_TEXTURE_3D, 0);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_3D, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_1D, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, 0);
shader1.unbind();
MyCheckErrorGL();
}
Da ich eine grüne Hand auf OpenGL bin. Wenn Sie andere Ratschläge zu meinem Code haben, zögern Sie nicht, mir zu sagen. :-)
Gute Frage. Bitte posten Sie das Ergebnis von 'glGetString (GL_VERSION)'. – Kos
Meine GL_VERSION ist 3.3.0. – user519835
Das sind nur die Ziffern; glGetString (GL_VERSION) sollte weitere Informationen enthalten (speziell zu Ihrem Kontexttyp). Da die Teilmenge der Punkte-Features veraltet ist, ist es hier sehr relevant, ob Sie ein 3.3-Kompatibilitätsprofil oder einen Kernprofil-Kontext haben. – Kos