opengl glGetInternalformat的所有返回值都依赖于目标参数和格式参数吗?

odopli94  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(130)

在第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 该命令,并为这些参数硬编码一个常量值,从而消除对这些参数的需要。这将简化关于内部格式和目标的信息的收集(如果存在任何目标特定信息的话)。

izkcnapc

izkcnapc1#

该标准非常清楚地说明了哪些东西关心target,哪些不关心。它描述了每个pname查询是如何工作的,并在这些描述中使用了特定的关键字。具体来说,它预先说明了这一点:
在以下说明中,术语 resource 一般是指使用 internalformattarget 创建的相应类型的对象。
因此,如果查询的描述不使用“目标”或“资源”,那么它就不关心它们。

相关问题