vge*_*gel 11 c opengl shader deprecated opengl-3
我正在尝试编写现代的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, 0, 6 * 2 * 3);
//And these next 2 lines
glCullFace(save_cull_mode);
glDepthFunc(save_depth_mode);
glUseProgram(0);
Run Code Online (Sandbox Code Playgroud)
正如您可能已经意识到的那样,此代码绘制了一个天空盒.部分原因是禁用剔除(所以我们可以在里面看到方框)并更改深度功能(基本上是优化,其中一部分在着色器中,部分在此处).我想保存并恢复这些值,但由于我无法使用gl[Push/Pop]Attrib,我必须自己做.这对于两个属性来说并不是什么大不了的事,但如果我使用更多属性,这很快就会变成一个巨大的痛苦(而且,据我所知,速度glGet*很慢,因为速度不是很快).我读到推送/弹出功能已被弃用,因为它们主要用于处理FFP状态,但这显然不是FFP状态,但推/弹功能非常适合使用.我应该用什么呢?或者我必须处理它?
小智 5
我认为 opengl.org 上的这个论坛帖子几乎总结了它:http : //www.opengl.org/discussion_boards/showthread.php/173957-glPushAttrib-depreciated-replace-by
基本上 OpenGL 状态应该由客户端处理,因为随着转向着色器,大多数属性无论如何都将存储在您的程序中。这是从 OpenGL 中删除旧的固定功能管道的努力的一部分。
| 归档时间: |
|
| 查看次数: |
4486 次 |
| 最近记录: |