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

前端之家收集整理的这篇文章主要介绍了由于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&C++相关文章