Problem:
Immediately after "glTexEnvi (GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);" I received GL # 1282 ERROR (INVALID_OPERATION).
Then, when I turned to the OpenGL 2.1 Reference, glTexEnv says that: GL_INVALID_OPERATION is generated if glTexEnv is executed between the execution of glBegin and the corresponding execution of glEnd. But this is not my circumstance, since I use an array of vertices.
Here is part of my 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(); }
Since I am a green hand on OpenGL. If you have any other advice on my code, plz feel free to tell me. :-)