我的OpenGL学习进阶之旅基本状态管理

Posted 欧阳鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅基本状态管理相关的知识,希望对你有一定的参考价值。

在博客 【我的OpenGL学习进阶之旅】OpenGL ES 3.0实现了具有可编程着色功能的图形管线
中我们介绍了OpenGL ES 3.0中管线的各个阶段。

每个管线阶段都有一个可以启用或者禁用的状态,每个上下文维护相应的状态值。

状态的例子有混合启用、混合银子、剔除启用、剔除曲面。

在初始化OpenGL ES 上下文(EGLContext)时,状态用默认值初始化。

1.1 glEnableglDisable命令

启用状态可以用glEnableglDisable命令设置。

void glDisable (GLenum cap);
void glEnable (GLenum cap);

glEnableglDisable命令启用各种功能。除了GL_DITHER被设置为GL_TRUE之外,其他功能的初始值均被设置为GL_FALSE

如果cap不是有效的状态枚举值,则生成错误代码GL_INVALID_ENUM

cap是要启用或者禁用的状态,可以是:

  • GL_BLEND
  • GL_CULL_FACE
  • GL_DEPTH_TEST
  • GL_DITHER
  • GL_POLYGON_OFFSET_FILL
  • GL_PRIMITIVE_RESTART_FIXED_INDEX
  • GL_RASTERIZER_DISCARD
  • GL_SAMPLE_ALPHA_TO_COVERAGE
  • GL_SAMPLE_COVERAGE
  • GL_STENCIL_TEST
  • GL_SCISSOR_TEST
#define GL_FALSE                          0
#define GL_TRUE                           1


#define GL_DITHER                         0x0BD0

#define GL_INVALID_ENUM                   0x0500


#define GL_CULL_FACE                      0x0B44
#define GL_BLEND                          0x0BE2
#define GL_DITHER                         0x0BD0
#define GL_STENCIL_TEST                   0x0B90
#define GL_DEPTH_TEST                     0x0B71
#define GL_SCISSOR_TEST                   0x0C11
#define GL_POLYGON_OFFSET_FILL            0x8037
#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
#define GL_SAMPLE_COVERAGE                0x80A0
#define GL_PRIMITIVE_RESTART_FIXED_INDEX  0x8D69
#define GL_RASTERIZER_DISCARD             0x8C89

1.2 glIsEnabled命令

可以用glIsEnabled命令来检查某个状态目前是启用还是禁用。

GLboolean glIsEnabled (GLenum cap);

根据被查询的状态是启用 还是 禁用,返回GL_TRUE或者GL_FLASE

如果cap不是有效的状态枚举值,则生成错误代码GL_INVALID_ENUM

以上是关于我的OpenGL学习进阶之旅基本状态管理的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

我的OpenGL学习进阶之旅介绍一下OpenGL ES的 光栅化 : 剔除多边形偏移

我的OpenGL学习进阶之旅介绍一下OpenGL ES的 光栅化 : 剔除多边形偏移