状态查询 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
是一个指向变量的指针,用于存放单个返回的指针值。当pname
为DEBUG_CALLBACK_FUNCTION
和DEBUG_CALLBACK_USER_PARAM
时,返回的是调试输出状态。
-
字符串查询(返回指向UTF-8编码的、以空字符结尾的静态字符串的指针,这些字符串描述了当前GL上下文的属性)
ubyte *glGetString( enum name );
接受的name
值为RENDERER
、VENDOR
、VERSION
和SHADING_LANGUAGE_VERSION
。
RENDERER
和VENDOR
字符串的格式取决于实现。
VERSION
和 SHADING_LANGUAGE_VERSION
格式:<version number><space><vendor-specific information>
。
版本号的格式可以是主版本号.次版本号或主版本号-次版本号.发布版本号,其中所有数字都有一个或多个数字。SHADING_LANGUAGE_VERSION的次版本号始终是两位数,与OpenGL着色语言规范的发布版本号相匹配。例如,此查询可能返回字符串"4.20",而相应的VERSION查询返回"4.2"。发布版本号和供应商特定信息是可选的。但是,如果存在,则它们与服务器相关,并且其格式和内容是依赖于实现的。
GetString
返回版本号(在VERSION字符串中),该版本号可以由当前GL上下文支持。因此,如果客户端和服务器支持不同的版本,则返回兼容的版本。
还可以通过调用GetIntegerv
并传递MAJOR_VERSION
和MINOR_VERSION
作为pname
来查询上下文版本,它们分别返回与VERSION字符串中的主版本号和次版本号相同的值。
可以通过调用GetIntegerv
并传递CONTEXT_PROFILE_MASK
作为值来查询上下文实现的profile,它返回一个包含表22.1中的位之一的掩码,对应于上下文实现的API profile(参见附录E.1)。
通过调用GetIntegerv
并传递CONTEXT_FLAGS
作为pname
,可以查询上下文的附加属性标志。以下是一些可能的标志:
- 如果
CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
在CONTEXT_FLAGS
中被设置,则上下文是一个前向兼容的上下文,详细信息见附录E。在这种情况下,附录中描述的已弃用功能不受支持;否则,上下文是一个完整的上下文,支持规范中描述的所有功能。 - 如果
CONTEXT_FLAG_DEBUG_BIT
在CONTEXT_FLAGS
中被设置,则上下文是一个调试上下文,启用了完整的调试输出支持,详细信息见第20章。 - 如果
CONTEXT_FLAG_ROBUST_ACCESS_BIT
在CONTEXT_FLAGS
中被设置,则会为使用顶点数组的绘图命令启用强壮的缓冲访问,详细信息见第10.3.7节。 - 如果
CONTEXT_FLAG_NO_ERROR_BIT
在CONTEXT_FLAGS
中被设置,则未启用任何错误行为,详细信息见第2.3.1.1节。
通过调用GetIntegerv
并传递CONTEXT_RELEASE_BEHAVIOR
作为pname
,可以查询上下文在不再当前(释放)时的行为。如果行为是CONTEXT_RELEASE_BEHAVIOR_FLUSH
,则上下文中的任何挂起命令都将被刷新。如果行为是NONE
,则不会刷新挂起命令。默认值是CONTEXT_RELEASE_BEHAVIOR_FLUSH
,在某些情况下可以使用特定于平台的上下文创建扩展更改。
-
索引字符串查询
ubyte *glGetStringi( enum name, uint index );
其中,name
是要查询的索引状态的名称,而index
是要查询的特定元素的索引。
如果name
是EXTENSIONS
,则将返回第index个支持的扩展名。index的范围从零到NUM_EXTENSIONS减一。任何特定扩展名与索引值之间都没有定义的关系;在不同的GL上下文和/或实现中,扩展名可能对应不同的索引值。
如果name
是SHADING_LANGUAGE_VERSION
,则返回OpenGL Shading Language和OpenGL ES Shading Language支持版本之一的版本字符串。index的范围从零到NUM_SHADING_LANGUAGE_VERSIONS减一。返回的字符串格式与着色器程序源中可能跟在#version后面的文本相同,并且格式为版本号后跟着一个空格和一个profile名称。例如,包含"420 core"的返回字符串表示支持OpenGL Shading Language 4.20,核心配置文件。空字符串表示支持OpenGL Shading Language 1.10,该版本不包含#version编译器指令。当OpenGL Shading Language的版本接受该版本时,返回的字符串中将始终存在profile字符串,即使在1.50及更高版本中存在默认profile字符串。
版本字符串100、300 es和310 es分别对应于OpenGL ES Shading Language版本1.00、3.00和3.10。
索引为零将始终返回GL支持的最新着色语言的字符串以及与API的着色语言profile相对应的profile(例如,在OpenGL 4.30核心配置文件上下文中返回的第一个条目将是"430 core",在OpenGL 4.30兼容性配置文件上下文中返回的第一个条目将是"430 compatibility")。对于其他值的index,没有定义返回字符串的顺序。
如果name
是SPIR_V_EXTENSIONS
,则返回第index个支持的SPIR-V扩展的SPIR-V扩展名(在相应的SPIR-V扩展文档中指定为Name String)。index的范围从零到NUM_SPIR_V_EXTENSIONS减一。可以使用GetInteger命令查询NUM_SPIR_V_EXTENSIONS的值。任何特定扩展名与索引值之间都没有定义的关系;在不同的GL上下文和/或实现中,SPIR-V扩展名可能对应不同的索引值。
内部格式查询 Internal Format Queries
使用以下命令可以查询关于实现相关支持的内部格式的信息
void glGetInternalformativ( enum target, enum internalformat, enum pname, sizei count, int *params );
void glGetInternalformati64v( enum target, enum internalformat, enum pname, sizei count, int64 *params );
其中,internalformat
可以是任何值。INTERNALFORMAT_SUPPORTED
是pname
的一个值,可用于确定内部格式是否受支持,其他pname
的定义是根据格式是否受支持而定义的。
target
指示内部格式的使用方式,必须是表中列出的目标之一。
Target | Usage |
---|---|
TEXTURE_1D | 1D texture |
TEXTURE_1D_ARRAY | 1D array texture |
TEXTURE_2D | 2D texture |
TEXTURE_2D_ARRAY | 2D array texture |
TEXTURE_2D_MULTISAMPLE | 2D multisample texture |
TEXTURE_2D_MULTISAMPLE_ARRAY | 2D multisample array texture |
TEXTURE_3D | 3D texture |
TEXTURE_BUFFER | buffer texture |
TEXTURE_CUBE_MAP | cube map texture |
TEXTURE_CUBE_MAP_ARRAY | cube map array texture |
TEXTURE_RECTANGLE | rectangle texture |
RENDERBUFFER | renderbuffer |
不会向params
写入超过count
个整数。如果有更多的数据可用,它们将被忽略,并且不会生成错误。
pname
表示要查询的信息。以下子节列出了pname
的有效值,并定义了它们的含义和可能返回的值。在以下描述中,术语“资源”用于泛指已使用internalformat
和target
创建的适当类型的对象。如果特定的target和internalformat组合没有意义,或者如果特定类型的target不受实现支持,则应给出不支持的答案。这不是错误。
所有属性都可以通过GetInternalformat*
命令查询。数据转换按照第2.2.2节中定义的进行。
支持的操作查询 Supported Operation Queries
关于支持操作类型的信息可以通过以下命令在params中返回以下值之一:
- NONE: 实现不支持请求的资源或操作。
- CAVEAT_SUPPORT: 实现支持请求的操作,但可能存在一些特定于实现的注意事项,使得支持不够理想。例如,使用该功能可能会导致性能降低(相对于其他格式或功能),例如软件渲染或其他模拟所需功能的机制。
- 如果查询报告存在注意事项,并且调试输出功能已启用(参见第20节),OpenGL将生成一个描述注意事项的调试输出消息。该消息的源是DEBUG_SOURCE_API,类型是DEBUG_TYPE_PERFORMANCE,并且具有实现相关的ID。
- FULL_SUPPORT: 实现完全支持请求的操作。
支持操作类型的可能的pname以及它们的含义包括:
- CLEAR_BUFFER: 返回在params中使用ClearBuffer*Data命令的资源支持。
- CLEAR_TEXTURE: 返回在params中使用ClearTex*Image命令的资源支持。
- COMPUTE_TEXTURE: 返回在params中将资源用作计算着色器中纹理采样源的支持。
- FILTER: 返回在params中除NEAREST或NEAREST_MIPMAP_NEAREST以外的滤波器类型的支持。这表示从这些资源采样时是否支持将MIN/MAG滤波器设置为LINEAR值。
- FRAGMENT_TEXTURE: 返回在params中将资源用作片段着色器中纹理采样源的支持。
- FRAMEBUFFER_BLEND: 返回在启用混合时通过帧缓冲附件渲染到资源的支持。
- FRAMEBUFFER_RENDERABLE: 返回通过帧缓冲附件渲染到资源的支持。
- FRAMEBUFFER_RENDERABLE_LAYERED: 返回通过帧缓冲附件分层渲染到资源的支持。
- GEOMETRY_TEXTURE: 返回在params中将资源用作几何着色器中纹理采样源的支持。
- MANUAL_GENERATE_MIPMAP: 返回手动生成mipmap的资源支持。
- READ_PIXELS: 返回将资源附加到帧缓冲时从资源中读取像素的支持。
- SHADER_IMAGE_ATOMIC: 返回在着色器中使用原子内存操作的资源支持。
- SHADER_IMAGE_LOAD: 返回在着色器中使用图像加载操作的资源支持。在这种情况下,internalformat是传递给BindImageTexture的format参数的值。
- SHADER_IMAGE_STORE: 返回在着色器中使用图像存储操作的资源支持。在这种情况下,internalformat是传递给BindImageTexture的format参数的值。
- SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: 返回将资源绑定为深度测试缓冲区时同时将其用作纹理采样源的支持。
- SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: 返回同时将资源用作纹理采样源和执行深度写入到资源的支持。
- SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: 返回将资源绑定为模板测试缓冲区时同时将其用作纹理采样源的支持。
- SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: 返回将资源同时用作纹理采样源和执行模板写入到资源的支持。
- SRGB_READ: 返回从资源中读取时的sRGB颜色空间转换支持。
- SRGB_WRITE: 返回写入资源时到sRGB颜色空间的转换支持。这表示当启用FRAMEBUFFER_SRGB时,写入帧缓冲区时使用该内部格式将编码为sRGB颜色空间。
- TESS_CONTROL_TEXTURE: 返回将资源用作细分控制着色器中纹理采样源的支持。
- TESS_EVALUATION_TEXTURE: 返回将资源用作细分评估着色器中纹理采样源的支持。
- TEXTURE_GATHER: 返回将资源与纹理聚合操作一起使用的支持。
- TEXTURE_GATHER_SHADOW: 返回将资源与具有阴影采样器的纹理聚合操作一起使用的支持。
- TEXTURE_SHADOW: 返回将资源与阴影采样器一起使用的支持。
- TEXTURE_VIEW: 返回将资源与TextureView命令一起使用的支持。
- VERTEX_TEXTURE: 返回将资源用作顶点着色器中纹理采样源的支持。
其他内部格式查询 Other Internal Format Queries
pname的其他支持值,它们的含义以及可能的返回值包括:
- COLOR_COMPONENTS: 如果内部格式包含任何颜色分量(R、G、B或A),则在params中返回TRUE。如果内部格式不受支持或不包含任何颜色分量,则返回FALSE。
- COLOR_ENCODING: 返回资源的颜色编码。颜色缓冲区的可能值为LINEAR或SRGB,分别表示线性或SRGB编码的颜色分量。对于非颜色格式(如深度或模板),或不受支持的资源,返回值为NONE。
- COLOR_RENDERABLE: 如果internalformat是颜色渲染(如第9.4节定义),则在params中返回TRUE。如果内部格式不受支持,或者内部格式不可渲染为颜色,则返回FALSE。
- DEPTH_COMPONENTS: 如果内部格式包含深度分量(D),则在params中返回TRUE。如果内部格式不受支持或不包含深度分量,则返回FALSE。
- DEPTH_RENDERABLE: 如果internalformat是深度渲染(如第9.4节定义),则在params中返回TRUE。如果内部格式不受支持,或者内部格式不可渲染为深度,则返回FALSE。
- GET_TEXTURE_IMAGE_FORMAT: 在从此资源查询纹理图像数据时,传递给GetTexImage的实现首选格式。可能的值包括任何合法传递给GetTexImage的format参数的值,或者如果资源不支持此操作,或者GetTexImage不受支持,则返回NONE。
- GET_TEXTURE_IMAGE_TYPE: 在从此资源查询纹理图像数据时,传递给GetTexImage的实现首选类型。可能的值包括任何合法传递给GetTexImage的type参数的值,或者如果资源不支持此操作,或者GetTexImage不受支持,则返回NONE。
- IMAGE_COMPATIBILITY_CLASS: 在将资源用作图像纹理时返回的兼容性类别。可能返回的值包括IMAGE_CLASS_4_X_32、IMAGE_CLASS_2_X_32、IMAGE_CLASS_1_X_32、IMAGE_CLASS_4_X_16、IMAGE_CLASS_2_X_16、IMAGE_CLASS_1_X_16、IMAGE_CLASS_4_X_8、IMAGE_CLASS_2_X_8、IMAGE_CLASS_1_X_8、IMAGE_CLASS_11_11_10和IMAGE_CLASS_10_10_10_2,分别对应于4x32、2x32、1x32、4x16、2x16、1x16、4x8、2x8、1x8、类(a) 11/11/10打包的浮点格式和类(b) 10/10/10/2打包格式。如果资源不支持图像纹理,或者不支持图像纹理,则返回NONE。
- IMAGE_FORMAT_COMPATIBILITY_TYPE: 在将资源用作图像纹理时返回的匹配标准。可能的值是IMAGE_FORMAT_COMPATIBILITY_BY_SIZE或IMAGE_FORMAT_COMPATIBILITY_BY_CLASS。如果资源不支持图像纹理,或者不支持图像纹理,则返回NONE。
- IMAGE_PIXEL_FORMAT: 在将资源用作图像纹理时返回的像素格式。这是表8.27中的像素格式列的值。如果资源不支持图像纹理,或者不支持图像纹理,则返回NONE。
- IMAGE_PIXEL_TYPE: 在将资源用作图像纹理时返回的像素类型。这是表8.27中的像素类型列的值。如果资源不支持图像纹理,或者不支持图像纹理,则返回NONE。
- IMAGE_TEXEL_SIZE: 在将资源用作图像纹理时返回的纹理单元大小。这是表8.27中的大小列的值。如果资源不支持图像纹理,或者不支持图像纹理,则返回零。
- INTERNALFORMAT_PREFERRED: 返回用于表示指定内部格式资源的实现首选内部格式。首选的内部格式应该不比请求的格式精度低。如果指定的内部格式已经是首选格式,或者没有更好的兼容格式,写入到params中的查询内部格式值。如果内部格式不受支持,则返回NONE。
- INTERNALFORMAT_RED_SIZE、INTERNALFORMAT_GREEN_SIZE、INTERNALFORMAT_BLUE_SIZE、INTERNALFORMAT_ALPHA_SIZE、INTERNALFORMAT_DEPTH_SIZE、INTERNALFORMAT_STENCIL_SIZE或INTERNALFORMAT_SHARED_SIZE: 对于未压缩的内部格式,查询这些值的值返回用于存储图像分量的实际分辨率。对于压缩的内部格式,返回的分辨率指定了产生与压缩算法大致相同质量的未压缩内部格式的组件分辨率。对于纹理,此查询将返回与相应TEXTURE__SIZE对应的GetTexLevelParameter查询相同的信息(除非GetTexLevelParameter*不支持此类查询)。如果内部格式不受支持,或者格式中不存在特定的分量,则将0写入到params中。
- INTERNALFORMAT_RED_TYPE、INTERNALFORMAT_GREEN_TYPE、INTERNALFORMAT_BLUE_TYPE、INTERNALFORMAT_ALPHA_TYPE、INTERNALFORMAT_DEPTH_TYPE或INTERNALFORMAT_STENCIL_TYPE:对于未压缩的内部格式,对这些值的查询返回用于存储组件的数据类型。对于压缩的内部格式,返回的类型指定了解压缩后的组件如何解释。对于纹理,此查询返回与相应TEXTURE__TYPE对应的GetTexLevelParameter查询相同的信息(除非GetTexLevelParameter*不支持此类查询)。可能返回的值包括NONE、SIGNED_NORMALIZED、UNSIGNED_NORMALIZED、FLOAT、INT和UNSIGNED_INT,分别表示缺失、带符号归一化的定点、无符号归一化的定点、浮点、有符号非归一化整数和无符号非归一化整数组件类型。如果格式不受支持,则对所有组件类型返回NONE。
- INTERNALFORMAT_SUPPORTED: 如果internalformat是实现中至少某些可能操作的内部格式,则将TRUE写入到params中。如果internalformat不是任何内部格式使用的有效令牌,则返回FALSE。必须支持的内部格式包括:
- 表8.12- 8.13和8.16中的大小内部格式,
- 表8.14中的任何特定压缩内部格式,
- 表8.26中的任何图像单元格式,
- 表8.14中的任何通用压缩内部格式,如果实现接受它用于任何纹理规范命令,
- 如果实现接受它用于纹理或图像规范,则是任何未指定大小或基本内部格式。
换句话说,任何由以下任何命令接受的internalformat:ClearBufferData、ClearBufferSubData、CompressedTexImage1D、CompressedTexImage2D、CompressedTexImage3D、CopyTexImage1D、CopyTexImage2D、RenderbufferStorage、RenderbufferStorageMultisample、TexBuffer、TexImage1D、TexImage2D、TexImage3D、TexImage2DMultisample、TexImage3DMultisample、TexStorage1D、TexStorage2D、TexStorage3D、TexStorage2DMultisample、TexStorage3DMultisample和TextureView,以及由BindImageTexture接受的任何有效格式,都必须受支持。
- MAX_COMBINED_DIMENSIONS: 返回资源的最大组合尺寸。组合尺寸是资源的各个尺寸的乘积。对于多采样表面,样本数被视为额外的尺寸。请注意,返回的值可能≥ 2^32,并且应使用GetInternalformati64v查询。此值应视为应用程序的建议。即使通过其他方式查询时可能有足够的内存可用,由于系统相关原因,大于此大小的分配可能会失败。这也不能保证较小的分配将成功,因为该值不受现有资源分配的影响。对于一维目标,这是最大的单个尺寸。对于一维数组目标,这是最大的组合宽度和层。对于二维目标,这是最大的组合宽度和高度。对于二维多样本目标,这是组合宽度、高度和样本数。对于二维数组目标,这是最大的组合宽度、高度和层数。对于二维多样本数组目标,这是最大的组合宽度、高度、层数和样本数。对于三维目标,这是最大的组合宽度、高度和深度。对于立方体贴图目标,这是最大的组合宽度、高度和面数。对于立方体贴图数组目标,这是最大的宽度、高度和层面数。如果资源不受支持,则返回零。
- MAX_DEPTH: 返回资源支持的最大深度。对于具有三个或更多维度的资源,第三个维度被视为深度。如果资源不具有至少三个维度,或者资源不受支持,则返回零。
- MAX_HEIGHT: 返回资源支持的最大高度。对于具有两个或更多维度的资源,第二个维度被视为高度。如果资源不具有至少两个维度,或者资源不受支持,则返回零。
- MAX_LAYERS: 返回资源支持的最大图层数。对于1D数组目标,返回值与MAX_HEIGHT相同。对于2D和立方体数组目标,返回值与MAX_DEPTH相同。如果资源不支持图层,或者资源不受支持,则返回零。
- MAX_WIDTH: 返回资源支持的最大宽度。对于仅具有一个维度的资源,该维度被视为宽度。如果资源不受支持,则返回零。
- MIPMAP: 如果资源支持MIP映射,则在params中返回TRUE。如果资源不受支持,或者不支持此类型的资源的MIP映射,则返回FALSE。
- NUM_SAMPLE_COUNTS: 返回通过查询SAMPLES返回的样本计数。如果internalformat不是颜色渲染、深度渲染或模板渲染(如第9.4节定义),或者target不支持多个样本(不是TEXTURE_2D_MULTISAMPLE、TEXTURE_2D_MULTISAMPLE_ARRAY或RENDERBUFFER),则返回零。
- READ_PIXELS_FORMAT: 返回从具有internalformat的帧缓冲区读取时传递给ReadPixels以获得最佳性能和图像质量的格式。可能的值包括任何合法传递给ReadPixels的format参数的值,或者如果internalformat不受支持或永远不可能是ReadPixels的有效源,则返回NONE。
- READ_PIXELS_TYPE: 返回从具有internalformat的帧缓冲区读取时传递给ReadPixels以获得最佳性能和图像质量的类型。可能的值包括任何合法传递给ReadPixels的type参数的值,或者如果internalformat不受支持或者不可能是ReadPixels的源,则返回NONE。
- SAMPLES: 将内部format和target支持的样本计数写入params,按降序数值排序。仅返回正值。请注意,使用计数为1查询SAMPLES将仅返回此格式支持的最大样本数。SAMPLES中的最大值保证至少是以下情况之一的最低值:MAX_INTEGER_SAMPLES的值(如果internalformat是有符号或无符号整数格式)、MAX_DEPTH_TEXTURE_SAMPLES的值(如果internalformat是深度/模板渲染格式并且target是TEXTURE_2D_MULTISAMPLE或TEXTURE_2D_MULTISAMPLE_ARRAY)、MAX_COLOR_TEXTURE_SAMPLES的值(如果internalformat是颜色渲染格式并且target是TEXTURE_2D_MULTISAMPLE或TEXTURE_2D_MULTISAMPLE_ARRAY)、MAX_SAMPLES的值。如果internalformat不是颜色渲染、深度渲染或模板渲染(如第9.4节定义),或者target不支持多个样本(即除了TEXTURE_2D_MULTISAMPLE、TEXTURE_2D_MULTISAMPLE_ARRAY或RENDERBUFFER之外的其他目标),则不会修改params。
- STENCIL_COMPONENTS: 如果内部格式包含模板分量(S),则在params中返回TRUE。如果内部格式不受支持或不包含模板分量,则返回FALSE。
- STENCIL_RENDERABLE: 如果internalformat是模板渲染(如第9.4节定义),则在params中返回TRUE。如果内部格式不受支持,或者内部格式不可渲染为模板,则返回FALSE。
- TEXTURE_COMPRESSED: 如果internalformat是支持此类型资源的压缩格式,则在params中返回TRUE。如果内部格式不是压缩的,或者不支持此类型的资源,则返回FALSE。
- TEXTURE_COMPRESSED_BLOCK_HEIGHT: 如果资源包含压缩格式,则返回params中压缩块的高度(以纹素为单位)。如果内部格式不是压缩的,或者资源不受支持,则返回0。
- TEXTURE_COMPRESSED_BLOCK_SIZE: 如果资源包含压缩格式,则返回params中每个块的字节数。如果内部格式不是压缩的,或者资源不受支持,则返回0。结合块宽度和高度查询,这允许计算比特率,并且可能与ARB压缩纹理像素存储一起使用。
- TEXTURE_COMPRESSED_BLOCK_WIDTH: 如果资源包含压缩格式,则返回params中压缩块的宽度(以纹素为单位)。如果内部格式不是压缩的,或者资源不受支持,则返回0。
- TEXTURE_IMAGE_FORMAT: 返回用于在此资源上指定纹理图像数据时传递给TexImageD或TexSubImageD的实现首选格式。可能的值包括任何合法传递给TexImageD命令的format参数的值,或者如果资源不支持此操作,则返回NONE。
- TEXTURE_IMAGE_TYPE: 返回用于在此资源上指定纹理图像数据时传递给TexImageD或TexSubImageD的实现首选类型。可能的值包括任何合法传递给TexImageD命令的type参数的值,或者如果资源不支持此操作,则返回NONE。
- VIEW_COMPATIBILITY_CLASS: 返回资源用作纹理视图时的兼容性类别。兼容性类别是表8.22中的Class列的值之一。如果资源没有其他兼容的格式,资源不支持视图,或者不支持纹理视图,则返回NONE。
转换反馈状态查询 Transform Feedback State Queries
绑定的变换反馈对象的状态可以通过调用GetIntegerv、GetIntegeriv、GetInteger64iv、GetBooleanv或其他查询函数,并将查询目标设置为表23.48中列出的标记之一来查询。此外,也可以使用以下命令查询变换反馈对象的状态:
void glGetTransformFeedbackiv(uint xfb, GLenum pname, GLint *param);
void glGetTransformFeedbackiv(uint xfb, GLenum pname, GLuint index, GLint *param);
void glGetTransformFeedbackiv(uint xfb, GLenum pname, GLuint index, GLint64 *param);
xfb
必须为零,表示默认的变换反馈对象,或者是现有变换反馈对象的名称。pname
必须是表23.48中列出的标记之一,具体取决于命令名称,如下面的错误部分所示。- 对于索引状态,
index
是变换反馈流的索引。 param
是一个变量地址,用于接收查询结果。
索引绑定状态查询 Indexed Binding State Queries
可以查询绑定到活动纹理单元的纹理对象的名称,调用glGetIntegerv
与pname
。
TEXTURE_BINDING_1D, TEXTURE_BINDING_1D_ARRAY, TEXTURE_BINDING_2D, TEXTURE_BINDING_2D_ARRAY, TEXTURE_BINDING_2D_MULTISAMPLE, TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY,
TEXTURE_BINDING_3D, TEXTURE_BINDING_BUFFER, TEXTURE_BINDING_CUBE_MAP, TEXTURE_BINDING_CUBE_MAP_ARRAY, or TEXTURE_BINDING_RECTANGLE。
同样,绑定到活动纹理单元的当前采样器可以通过调用glGetIntegerv
调用pname
SAMPLER_BINDING
来查询。
要在不改变活动纹理选择器的情况下查询绑定到特定纹理单元的绑定纹理或采样器对象,使用上面列出的有效名称之一调用glGetIntegeri_v
,并将索引设置为要查询的从零开始的纹理单元索引。