在第22.3节下的OpenGL 4.6 specification中,描述了一个名为glGetInternalformat的命令,该命令可用于收集有关内部格式的实现相关信息。
该命令具有规范中列出的以下签名:
void GetInternalformativ( enum target, enum internalformat, enum pname, sizei count, int *params );
void GetInternalformati64v( enum target, enum internalformat, enum pname, sizei count, int64 *params );
根据规范,pname的有效值为:
// Supported operations
GL_CLEAR_BUFFER
GL_CLEAR_TEXTURE
GL_COMPUTE_TEXTURE
GL_FILTER
GL_FRAGMENT_TEXTURE
GL_FRAMEBUFFER_BLEND
GL_FRAMEBUFFER_RENDERABLE
GL_FRAMEBUFFER_RENDERABLE_LAYERED
GL_GEOMETRY_TEXTURE
GL_MANUAL_GENERATE_MIPMAP
GL_READ_PIXELS
GL_SHADER_IMAGE_ATOMIC
GL_SHADER_IMAGE_LOAD
GL_SHADER_IMAGE_STORE
GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST
GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE
GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST
GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE
GL_SRGB_READ
GL_SRGB_WRITE
GL_TESS_CONTROL_TEXTURE
GL_TESS_EVALUATION_TEXTURE
GL_TEXTURE_GATHER
GL_TEXTURE_GATHER_SHADOW
GL_TEXTURE_SHADOW
GL_TEXTURE_VIEW
GL_VERTEX_TEXTURE
// Other
GL_COLOR_COMPONENTS
GL_COLOR_ENCODING
GL_COLOR_RENDERABLE
GL_DEPTH_COMPONENTS
GL_DEPTH_RENDERABLE
GL_GET_TEXTURE_IMAGE_FORMAT
GL_GET_TEXTURE_IMAGE_TYPE
GL_IMAGE_COMPATIBILITY_CLASS
GL_IMAGE_FORMAT_COMPATIBILITY_TYPE
GL_IMAGE_PIXEL_FORMAT
GL_IMAGE_PIXEL_TYPE
GL_IMAGE_TEXEL_SIZE
GL_INTERNALFORMAT_PREFERRED
GL_INTERNALFORMAT_RED_SIZE
GL_INTERNALFORMAT_GREEN_SIZE
GL_INTERNALFORMAT_BLUE_SIZE
GL_INTERNALFORMAT_ALPHA_SIZE
GL_INTERNALFORMAT_DEPTH_SIZE
GL_INTERNALFORMAT_STENCIL_SIZE
GL_INTERNALFORMAT_SHARED_SIZE
GL_INTERNALFORMAT_RED_TYPE
GL_INTERNALFORMAT_GREEN_TYPE
GL_INTERNALFORMAT_BLUE_TYPE
GL_INTERNALFORMAT_ALPHA_TYPE
GL_INTERNALFORMAT_DEPTH_TYPE
GL_INTERNALFORMAT_STENCIL_TYPE
GL_INTERNALFORMAT_SUPPORTED
GL_MAX_COMBINED_DIMENSIONS
GL_MAX_DEPTH
GL_MAX_HEIGHT
GL_MAX_LAYERS
GL_MAX_WIDTH
GL_MIPMAP
GL_NUM_SAMPLE_COUNTS
GL_READ_PIXELS_FORMAT
GL_READ_PIXELS_TYPE
GL_SAMPLES
GL_STENCIL_COMPONENTS
GL_STENCIL_RENDERABLE
GL_TEXTURE_COMPRESSED
GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT
GL_TEXTURE_COMPRESSED_BLOCK_SIZE
GL_TEXTURE_COMPRESSED_BLOCK_WIDTH
GL_TEXTURE_IMAGE_FORMAT
GL_TEXTURE_IMAGE_TYPE
GL_VIEW_COMPATIBILITY_CLASS
我的问题是,对于所有那些可以查询的pname值,是否有任何一个不需要target和internalformat参数?是否有一些pname无论使用哪个target都将返回相同的值?是否有任何pname无论internalformat都将返回相同的值?规范对此并不清楚。
我问这个问题的原因是因为一些pnames似乎是关于internalformat的信息,与目标无关。我假设opengl的幕后人员不想为不需要目标和internalformat的pnames创建一组单独的命令,而是对所有情况使用一组单独的命令。
如果目标无关紧要的pname值列表和内部格式无关紧要的pname值列表并且这些列表保证在所有平台上都是相同的,则可以简单地 Package 该命令,并为这些参数硬编码一个常量值,从而消除对这些参数的需要。这将简化关于内部格式和目标的信息的收集(如果存在任何目标特定信息的话)。
1条答案
按热度按时间izkcnapc1#
该标准非常清楚地说明了哪些东西关心
target
,哪些不关心。它描述了每个pname
查询是如何工作的,并在这些描述中使用了特定的关键字。具体来说,它预先说明了这一点:在以下说明中,术语 resource 一般是指使用 internalformat 和 target 创建的相应类型的对象。
因此,如果查询的描述不使用“目标”或“资源”,那么它就不关心它们。