2013-03-07 2 views
4

У меня проблема с PyOpenGL 3.0.2 на 64-разрядном ноутбуке Windows 8 с графическим чипсетом Intel HD 3000. Любой вызов glGenBuffers(1) (после надлежащей инициализации GL) врезается:Нарушение прав доступа PyOpenGL на Intel HD Graphics 3000

File ".\sample.py", line 7, in init 
    buffer = glGenBuffers(1) 
    File "latebind.pyx", line 32, in OpenGL_accelerate.latebind.LateBind.__call__ (src\latebind.c:768) 
    File "wrapper.pyx", line 308, in OpenGL_accelerate.wrapper.Wrapper.__call__ (src\wrapper.c:5811) 
    File "C:\Python27\lib\site-packages\OpenGL\platform\baseplatform.py", line 379, in __call__ 
    return self(*args, **named) 
WindowsError: exception: access violation writing 0x00000000720CF630 

Точно такой же скрипт работает и на других машинах.

У меня установлена ​​последняя версия драйвера GPU (15.28.12.64.2932), которая поддерживает OpenGL 3.1.

Любые идеи?

Вот пример сценария:

import sys 
from OpenGL.GLUT import * 
from OpenGL.GL import * 
from OpenGL.GLU import * 

def init(): 
    buffer = glGenBuffers(1) 

glutInit(sys.argv) 
glutInitWindowSize(600, 600) 
glutCreateWindow("Sample") 
init() 
glutMainLoop() 
+0

Возможный дубликат [Вызов OpenGL-расширений с Python] (http://stackoverflow.com/questions/6423994/calling-opengl-extensions-from-python) – genpfault

+0

Я не думаю, что это 'glGenBuffers' находится в 'OpenGL.GL. *', А не в 'OpenGL.GL.ARB. *'. Кроме того, в моей системе нет 'OpenGL.GL.ARB.vertex_buffer_object'. –

ответ

1

Я, наконец, решил проблему, удалив все мои дистрибутивы на 64 бита Python и установив 32 бита Python и все библиотеки в 32 бита. Кроме того, мне пришлось использовать PyOpenGL 3.1.a. Я понятия не имею, что вызвало проблему с установкой 64 бит в первую очередь.

1

Даже если ваши драйверы поддерживают OpenGl 3,1, Перенасыщение собирается дать вам OpenGL 2.0 контекста по умолчанию. Вы собираетесь должны попросить 3.1 cpntext, вероятно, так:

glutInitContextVersion(3, 1) 
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE) 
glutInitContextProfile(GLUT_CORE_PROFILE) 

Без надлежащего 3.1 контекста любые 3.1 конкретных вызовов приведут вас к аварии.

+1

Я просто попробовал, и у меня такая же проблема. Кроме того, у меня такая же проблема с PyQt4 (с использованием QGLWidget), поэтому я не думаю, что это зависит от Glut. –

+0

Это не Глют специфический. На большинстве платформ при запуске OpenGL вы получите в лучшем случае контекст 2.x. Если вы попытаетесь использовать функциональность 3.x без надлежащего контекста, вы потерпите крах. –

+0

ОК. У меня есть два вопроса: * Когда я выполняю 'glGetString (GL_VERSION)' Я получаю OpenGL 3.1: это гарантирует, что OpenGL 3.1 действительно загружен? Если нет, то как узнать точную версию? * Я думаю, что 'glGenBuffers' является основным OpenGL 1.5, поэтому он должен работать, есть ли OpenGL 2 или OpenGL 3.1, правильно? –

Смежные вопросы