(十五)状态查询

OpenGL ES 3.0维护着状态信息,其中包含渲染所需的内部变量值。

OpenGL ES 3.0实现字符串查询

获取OpenGL ES 3.0实现的信息:

const GLubyte* glGetString(GLenum name)
const GLubyte* glGetStringi(GLenum name, GLuint index)

查询OpenGL ES实现决定的限制

许多渲染参数取决于OpenGL ES实现的底层功能。

void glGetBooleanv(GLenum pname, GLboolean *params)
void glGetFloatv(GLenum pname, GLfloat *params)
void glGetIntegerv(GLenum pname, GLint *params)
void glGetInteger64v(GLenum pname, GLint64 *params)

查询OpenGL ES状态

OpenGL ES状态:

void glGetBooleanv(GLenum pname, GLboolean *params)
void glGetFloatv(GLenum pname, GLfloat *params)
void glGetIntegerv(GLenum pname, GLint *params)
void glGetInteger64v(GLenum pname, GLint64 *params)

提示

使用Hint修正各种功能的操作:

void glHint(GLenum target, GLenum mode)

实体名称查询

OpenGL ES 3.0通过整数名称引用你所定义的许多实体(纹理、着色器、程序、顶点缓冲区、采样器对象、查询对象、同步对象、顶点数组对象、变换反馈对象、帧缓冲区和渲染缓冲区)。

GLboolean glIsTexture(GLuint texture)
GLboolean glIsShader(GLuint shader)
GLboolean glIsProgram(GLuint program)
GLboolean glIsBuffer(GLuint buffer)
GLboolean glIsSampler(GLuint sampler)
GLboolean glIsQuery(GLuint query)
GLboolean glIsSync(GLuint sync)
GLboolean glIsVertexArray(GLuint array)
GLboolean glIsTransformFeedback(GLuint transform)
GLboolean glIsRenderbuffer(GLuint renderbuffer)
GLboolean glIsFramebuffer(GLuint framebuffer)

不可编程操作控制和查询

许多OpenGL ES 3.0的光栅化功能是通过开关所需功能来控制的:

void glEnable(GLenum capability)
void glDisable(GLenum capability)
GLboolean glIsEnabled(GLenum capability)

着色器和程序状体查询

用于查询和着色器相关的状态:

void glGetAttachedShaders( GLuint program, GLsizei maxcount,
GLsizei *count, GLuint *shaders)
void glGetShaderSource( GLuint shader, GLsizei bufsize,
GLsizei *length, GLchar *source)
void glGetUniformfv(GLuint program, GLint location,
GLfloat *params)
void glGetUniformiv( GLuint program, GLint location,
GLint *params)
void glGetShaderPrecisionFormat( GLenum shaderType,
GLenum precisionType,
GLint *range,
GLint *precision)

顶点属性查询

顶点属性查询:

void glGetVertexAttribPointerv( GLuint index, GLenum pname,
GLvoid **pointer)
void glGetVertexAttribfv(GLuint index, GLenum pname,
GLfloat *params)
void glGetVertexAttribiv( GLuint index, GLenum pname,
GLint *params)

纹理状态查询

纹理状态查询:

void glGetTexParameterfv(GLenum target, GLenum pname,
GLfloat *params)
void glGetTexParameteriv( GLenum target, GLenum pname,
GLint *params)

采样器查询

采样器查询:

void glGetSamplerParameterfv(GLuint sampler, GLenum pname,
GLfloat *params)
void glGetSamplerParameteriv( GLuint sampler, GLenum pname,
GLint *params)

同步对象查询

同步对象查询:

void glGetQueryiv( GLuint target, GLenum pname,
GLint *params)
void glGetQueryObjectuiv(GLuint id, GLenum pname,
GLuint *params)

异步对象查询

异步对象查询:

void glGetSynciv(GLsync sync, GLenum pname,
GLsizei bufsize, GLsizei *length,
GLint *values)

顶点缓冲区查询

顶点缓冲区查询:

void glGetBufferParameteriv(GLenum target, GLenum pname,
GLint *params)
void glGetBufferParameter64iv( GLenum target, GLenum pname,
GLint64 *params)
void glGetBufferPointerv( GLenum target, GLenum pname,
GLvoid **params)

渲染缓冲区和帧缓冲区状态查询

渲染缓冲区和帧缓冲区状态查询:

void glGetRenderbufferParameteriv( GLenum target,
GLenum pname,
GLint *params)
void glGet FramebufferAttachmentParameteriv(GLenum target,
GLenum attachment,GLenum pname,GLint *params)

小结

本章提供了应用程序可以查询的状态参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容