如何确定OpenGL输出缓冲区的大小(COMPSIZE)

时间:2013-03-15 21:46:05

标签: opengl specs

我正在尝试为Node创建OpenGL绑定。由于OpenGL API的庞大规模,手动执行此操作是不切实际的,因此我转向Khronos的OpenGL注册表。

提供的文件很容易解析,但似乎缺少一个重要的部分,这就是如何计算非平凡参数缓冲区的大小。

这是一个需要这样一个输出缓冲区的函数定义的例子。注意COMPSIZE()表达式:

GetTextureImageEXT(texture, target, level, format, type, pixels)
    return      void
    param       texture     Texture in value
    param       target      TextureTarget in value
    param       level       CheckedInt32 in value
    param       format      PixelFormat in value
    param       type        PixelType in value
    param       pixels      Void out array [COMPSIZE(target/level/format/type)]
    category    EXT_direct_state_access
    dlflags     notlistable
    glxflags    ignore ### client-handcode server-handcode
    extension   soft WINSOFT
    glfflags    capture-execute capture-handcode decode-handcode pixel-pack

此示例很好地说明了问题。很明显,“pixels”参数需要一个输出缓冲区,其大小取决于目标,级别,格式和类型参数。但是,我如何或在哪里可以找到计算该尺寸的实际公式?

我在网上找到的唯一相关信息是一个名为compsize.c的C源文件,它显然属于OpenGL的Apple实现。

有人可以帮我找到关于此的硬数据吗?

1 个答案:

答案 0 :(得分:0)

我将在这里回答我自己的问题。

我的结论是,我试图实现的目标并不适合OpenGL的工作方式;我想要自动化的计算仅仅依赖于太多要做的因素。

只是为了澄清:我打算做的是为Node提供OpenGL绑定(基于Google的V8虚拟机的命令行JavaScript解释器)。由于一些OpenGL(或扩展)调用返回大量数据和/或数据可能具有非平凡的内存布局,我希望通过基于Khronos'的自动生成代码分配所需的输出缓冲区来帮助程序员。可解析的规范文件,与GLEW等项目已用于生成扩展C绑定的文件相同。

基于我收到的答案(谢谢大家!),这个想法很天真 - 而且意图没有我想象的那么有用,因为考虑到它,只需要一个合适大小的缓冲区就可以避免访问违规,但是没有帮助程序员使用他获得的信息。最后,他仍然需要知道确切的内存布局,因此分配缓冲区对他来说不是一个问题(至少在理论上是这样)。

鉴于这一切,计算输出缓冲区大小以及处理其内容最好留给下一个更高的软件层。因为据我所知,在同一块软件中没有人使用OpenGL API的整个,所以实际上不需要单个库来处理所有可能的输出缓冲区分配。

感谢所有回复的人!