我的OpenGL学习进阶之旅基本状态管理
Posted 欧阳鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅基本状态管理相关的知识,希望对你有一定的参考价值。
在博客 【我的OpenGL学习进阶之旅】OpenGL ES 3.0实现了具有可编程着色功能的图形管线
中我们介绍了OpenGL ES 3.0中管线的各个阶段。
每个管线阶段都有一个可以启用或者禁用的状态,每个上下文维护相应的状态值。
状态的例子有混合启用、混合银子、剔除启用、剔除曲面。
在初始化OpenGL ES 上下文(EGLContext
)时,状态用默认值初始化。
1.1 glEnable
和glDisable
命令
启用状态可以用glEnable
和glDisable
命令设置。
void glDisable (GLenum cap);
void glEnable (GLenum cap);
glEnable
和glDisable
命令启用各种功能。除了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实现了具有可编程着色功能的图形管线