Вызов расширений OpenGL из Python - PullRequest
2 голосов
/ 21 июня 2011

Я использую PyOpenGL 3 в Ubuntu Natty.

Я хочу использовать функцию glDrawElementsBaseVertex.

Я вижу ее в списке в моем выводе glxinfo,поэтому я знаю, что у моей карты есть.

Однако я не могу найти, как на самом деле вызвать ее.Когда я import OpenGL.GL получаю NameError, если я пытаюсь его использовать.(В отличие от этого None).

Ответы [ 2 ]

5 голосов
/ 21 июня 2011

Попробуйте импортировать функцию через ее расширение имени:

>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
1 голос
/ 21 июня 2011

Расширения OpenGL должны быть предоставлены самой привязкой, PyOpenGL не поддерживает новые расширения «цепной загрузки»;хотя это было возможно реализовать, это просто не стоит усилий.

Может быть, вы просто неправильно обращались к расширению.Документация PyOpenGL объясняет, что есть несколько способов сделать это

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

Расширения и условная функциональность PyOpenGL поддерживает большинство расширений OpenGL.Расширения доступны как «нормальные» указатели на функции путем импорта имени созданного пакета для расширения, например:

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

, нет необходимости вызывать функции инициализации или тому подобное для модуля расширения.Вы можете, если хотите, вызвать функцию «init» для расширения, чтобы получить логическое значение, указывающее, поддерживает ли локальный компьютер данное расширение, например, так:

if glInitVertexBufferObjectARB():     
     ...

Однако обычно это проще проверитьдля логической истинности точек входа, которые вы хотите использовать:

if (glGenBuffersARB): 
    buffers = glGenBuffersARB( 1 )

Часто существует множество точек входа, которые реализуют один и тот же API, для которого вы хотели бы использовать любую доступную реализацию (вероятно, прикакое-то предпочтение по порядку).Модуль OpenGL.extensions предоставляет простой механизм для поддержки этого:

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

Если первый элемент является строкой, он будет использоваться в качестве имени альтернативного объекта, в противном случае имя берется из первого аргумента..

...