从 Python 调用 OpenGL 扩展

发布于 2024-11-16 16:27:33 字数 351 浏览 11 评论 0原文

我在 Ubuntu Natty 上使用 PyOpenGL 3。

我想使用 glDrawElementsBaseVertex功能。

我可以看到它列在我的 glxinfo 输出中,所以我知道我的卡有它。

但是,我找不到如何实际调用它。当我导入 OpenGL.GL 时,如果我尝试使用它,我会收到 NameError 。 (与None不同)。

I am using PyOpenGL 3 on Ubuntu Natty.

I want to use the glDrawElementsBaseVertex function.

I can see it listed in my glxinfo output, so I know my card has it.

However, I cannot find how to actually invoke it. When I import OpenGL.GL I get a NameError if I try to use it. (As distinct from it being None).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

睫毛上残留的泪 2024-11-23 16:27:33

尝试通过其扩展名导入该函数:

>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>

Try to import the function through its extension name:

>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
我一向站在原地 2024-11-23 16:27:33

OpenGL扩展必须由绑定本身提供,PyOpenGL不支持“链式加载”新扩展;虽然可以实现这样的目标,但不值得付出努力。

也许您刚刚未正确访问扩展程序。 PyOpenGL 文档解释说,有多种方法可以做到这一点

http://pyopengl.sourceforge.net/文档/opengl_diffs.html

扩展和条件
功能 PyOpenGL 支持
大多数 OpenGL 扩展。扩展
可用作“正常”功能
通过导入构造的指针
扩展包名称,用于
实例:

from OpenGL.GL.ARB.vertex_buffer_object import * buffer = glGenBuffersARB(1)

不需要打电话
初始化函数等
对于扩展模块。你可以,如果
你喜欢的话,调用“init”函数
用于检索布尔值的扩展
指示是否是本地机器
支持给定的扩展,如下所示:

如果 glInitVertexBufferObjectARB():     
     ...

但是,通常更清楚的是
测试布尔真值
您希望使用的入口点:

if (glGenBuffersARB): 
    缓冲区 = glGenBuffersARB( 1 )

经常有一个
实现的入口点数量
您想要的相同 API
使用任何一个实现
可用(可能有一些偏好
为了)。 OpenGL.扩展
模块提供了一个简单的机制
支持这个:

从 OpenGL.extensions 导入替代品
glCreateProgram = 替代('glCreateProgram',glCreateProgram,glCreateProgramObjectARB)
glCreateProgram = 替代( glCreateProgram, glCreateProgramObjectARB)

如果是第一个
element 是一个字符串,它将被用作
替代对象的名称,
否则该名称取自
第一个参数。

OpenGL extensions must be provided by the binding itself, PyOpenGL has no support for "chain loading" new extensions; while it was possible to implement such, it's just not worth the effort.

Maybe you just accessed the extension not properly. The PyOpenGL documentation explains, that there are several ways to do this

http://pyopengl.sourceforge.net/documentation/opengl_diffs.html

Extensions and Conditional
Functionality PyOpenGL has support for
most OpenGL extensions. Extensions
are available as "normal" function
pointers by importing the constructed
package name for the extension, for
instance:

from OpenGL.GL.ARB.vertex_buffer_object import * buffer = glGenBuffersARB(1)

there is no need to call
initialization functions or the like
for the extension module. You can, if
you like, call the "init" function for
the extension to retrieve a boolean
indicating whether the local machine
supports a given extension, like so:

if glInitVertexBufferObjectARB():     
     ...

However, it is normally clearer to
test for the boolean truth of the
entry points you wish to use:

if (glGenBuffersARB): 
    buffers = glGenBuffersARB( 1 )

There are often a
number of entry points which implement
the same API, for which you would like
to use whichever implementation is
available (likely with some preference
in order). The OpenGL.extensions
module provides an easy mechanism to
support this:

from OpenGL.extensions import alternate
glCreateProgram = alternate( 'glCreateProgram', glCreateProgram, glCreateProgramObjectARB)
glCreateProgram = alternate( glCreateProgram, glCreateProgramObjectARB)

If the first
element is a string it will be used as
the name of the alternate object,
otherwise the name is taken from the
first argument.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文