22 OpenGL状态查询

状态查询 Context State Queries

这些状态是使用在前几章中描述的命令设置的。与GL对象相关的状态通常可以使用与设置状态相同的命令一起描述来查询。这些命令可以直接作用于命名对象,也可以间接通过GL上下文中的绑定(例如当前绑定的帧缓冲对象)进行操作。

所述章节中的命令重点介绍了与上下文直接相关的状态查询,而不是与特定对象相关的状态。在查询上下文状态时,可能会执行数据转换,如规范中第2.2.2节所述。

简单查询 Simple Queries

大部分GL状态完全由符号常量标识。可以使用一组Get命令获取这些状态变量的值。它们在规范的其他地方以及与这些状态相关的命令以及第23章的状态表中进行了描述。

  • 获取简单的状态变量

    • void glGetBooleanv( enum pname, boolean *data );
    • void glGetIntegerv( enum pname, int *data );
    • void glGetInteger64v( enum pname, int64 *data );
    • void glGetFloatv( enum pname, float *data );
    • void glGetDoublev( enum pname, double *data );
  • 查询索引的简单状态变量

    • void glGetBooleani_v( enum target, uint index, boolean *data );
    • void glGetIntegeri_v( enum target, uint index, int *data );
    • void glGetFloati_v( enum target, uint index, float *data );
    • void glGetDoublei_v( enum target, uint index, double *data );
    • void glGetInteger64i_v( enum target, uint index, int64 *data );
  • 启用还是禁用

    • boolean glIsEnabled( enum cap );
    • boolean glIsEnabledi( enum target, uint index );

指针、字符串和相关上下文查询 Pointer, String, and Related Context Queries

  • 指针查询
    • void glGetPointerv( GLenum pname, void **params );

其中,pname是一个表示要返回的指针的符号常量。params是一个指向变量的指针,用于存放单个返回的指针值。当pnameDEBUG_CALLBACK_FUNCTIONDEBUG_CALLBACK_USER_PARAM时,返回的是调试输出状态。

  • 字符串查询(返回指向UTF-8编码的、以空字符结尾的静态字符串的指针,这些字符串描述了当前GL上下文的属性)

    • ubyte *glGetString( enum name );

接受的name值为RENDERERVENDORVERSIONSHADING_LANGUAGE_VERSION

RENDERERVENDOR字符串的格式取决于实现。

VERSIONSHADING_LANGUAGE_VERSION格式:<version number><space><vendor-specific information>

版本号的格式可以是主版本号.次版本号或主版本号-次版本号.发布版本号,其中所有数字都有一个或多个数字。SHADING_LANGUAGE_VERSION的次版本号始终是两位数,与OpenGL着色语言规范的发布版本号相匹配。例如,此查询可能返回字符串"4.20",而相应的VERSION查询返回"4.2"。发布版本号和供应商特定信息是可选的。但是,如果存在,则它们与服务器相关,并且其格式和内容是依赖于实现的。

GetString返回版本号(在VERSION字符串中),该版本号可以由当前GL上下文支持。因此,如果客户端和服务器支持不同的版本,则返回兼容的版本。

还可以通过调用GetIntegerv并传递MAJOR_VERSIONMINOR_VERSION作为pname来查询上下文版本,它们分别返回与VERSION字符串中的主版本号和次版本号相同的值。

可以通过调用GetIntegerv并传递CONTEXT_PROFILE_MASK作为值来查询上下文实现的profile,它返回一个包含表22.1中的位之一的掩码,对应于上下文实现的API profile(参见附录E.1)。

通过调用GetIntegerv并传递CONTEXT_FLAGS作为pname,可以查询上下文的附加属性标志。以下是一些可能的标志:

  • 如果CONTEXT_FLAG_FORWARD_COMPATIBLE_BITCONTEXT_FLAGS中被设置,则上下文是一个前向兼容的上下文,详细信息见附录E。在这种情况下,附录中描述的已弃用功能不受支持;否则,上下文是一个完整的上下文,支持规范中描述的所有功能。
  • 如果CONTEXT_FLAG_DEBUG_BITCONTEXT_FLAGS中被设置,则上下文是一个调试上下文,启用了完整的调试输出支持,详细信息见第20章。
  • 如果CONTEXT_FLAG_ROBUST_ACCESS_BITCONTEXT_FLAGS中被设置,则会为使用顶点数组的绘图命令启用强壮的缓冲访问,详细信息见第10.3.7节。
  • 如果CONTEXT_FLAG_NO_ERROR_BITCONTEXT_FLAGS中被设置,则未启用任何错误行为,详细信息见第2.3.1.1节。

通过调用GetIntegerv并传递CONTEXT_RELEASE_BEHAVIOR作为pname,可以查询上下文在不再当前(释放)时的行为。如果行为是CONTEXT_RELEASE_BEHAVIOR_FLUSH,则上下文中的任何挂起命令都将被刷新。如果行为是NONE,则不会刷新挂起命令。默认值是CONTEXT_RELEASE_BEHAVIOR_FLUSH,在某些情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值