由于glPushAttrib / glPopAttrib已被弃用,所以保存GL_DEPTH_FUNC等属性的新方式是什么?

我正在尝试编写现代OpenGL,但是打了一些错误的东西.

我有这个代码

gluseProgram(skyBox_program->id);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_CUBE_MAP,skyBox->id);
    gluniform1i(get_program_uniform(skyBox_program,"cubemap_tex"),1);
    //From here
    GLint save_cull_mode,save_depth_mode;
    glGetIntegerv(GL_CULL_FACE_MODE,&save_cull_mode);
    glGetIntegerv(GL_DEPTH_FUNC,&save_depth_mode);
    glCullFace(GL_FRONT);
    glDepthFunc(GL_LEQUAL);
    //To here
        gluniformMatrix4fv(get_program_uniform(skyBox_program,"camera"),1,GL_FALSE,cam_rot.mat);
        glBindVertexArray(skyBox_vao);
        glDrawArrays(GL_TRIANGLES,6 * 2 * 3);
    //And these next 2 lines
    glCullFace(save_cull_mode);
    glDepthFunc(save_depth_mode);
gluseProgram(0);

这段代码,你可能意识到,绘制一个天空盒.其中一部分是禁用剔除(所以我们可以看到内部的框),并改变深度功能(基本上是优化,其中一部分在着色器中,部分在这里).我想保存并恢复这些值,但是由于我不能使用gl [Push / Pop] Attrib,我必须自己做.这不仅仅是两个属性,而且如果我用得更多,这很快就会变成一个巨大的痛苦(据我所知,缓慢,因为glGet *不是很快).我读到push / pop函数被弃用,因为它们主要用于处理FFP状态,但是这显然不是FFP状态,而push / pop函数将很适合使用.应该用什么呢?还是要deal with it

解决方法

我认为这个论坛的帖子opengl.org几乎总结了: http://www.opengl.org/discussion_boards/showthread.php/173957-glPushAttrib-depreciated-replace-by

基本上OpenGL状态预计由客户端处理,因为随着移动到着色器,大部分属性将被存储在您的程序中.这是从OpenGL中删除旧的固定功能管道的一部分.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...