1

我正在尝试为 Node.js 创建 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

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

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

谁能帮我找到这方面的硬数据?

4

1 回答 1

0

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

我的结论是,我试图实现的目标不符合 OpenGL 的工作方式。我想自动化的计算仅仅取决于太多的因素要以这种方式完成。

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

根据我收到的答案(谢谢大家!),这个想法很天真 - 并且意图没有我想象的那么有用,因为考虑到它,简单地拥有一个大小合适的缓冲区可能会避免访问冲突,但不会帮助程序员使用他获得的信息。最后,无论如何,他仍然需要知道确切的内存布局,因此分配缓冲区对他来说不是问题(嗯,至少在理论上)。

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

感谢所有回复的人!

于 2013-03-16T10:15:03.580 回答