Problem mit ctypes und GLEW

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
DeafMan1983
User
Beiträge: 2
Registriert: Sonntag 24. April 2022, 15:27

Hallo zusammen,

möchte ich dass ich Problem lösen will.
Ich wollte Python mit glew32.dll einbinden.

Code: Alles auswählen

from ctypes import *

GLenum = c_uint # "GLenum = uint"
GLBoolean = c_bool # "GLBoolean = boolean"
GLSizei = c_int # "GLSizei = int"
GLuint = c_uint # "GLuint, = uint"
GLuintPointer = POINTER(GLuint) # "GLuintPointer = (const) uint*"

glewDLL = WinDLL("C:/vcpkg/installed/x64-windows/bin/glew32.dll")
glewExperimental = glewDLL.glewExperimental
glewExperimental.restype = GLBoolean

glewInit = glewDLL.glewInit
glewInit.restype = GLenum
res_01 = glewInit()
print("{:} returned: {:d}".format(glewInit.__name__, res_01))

glewGenVertexArrays = glewDLL.__glewGenVertexArrays
glewGenVertexArrays.argtypes = GLSizei, GLuintPointer
glewGenVertexArrays.restype = None

glewExperimental = True
glewInit()
vaoID = sizeof(c_uint)
res_02 = glewGenVertexArrays(1, cast(vaoID, GLuintPointer))
print("{:} returned: {:d}".format(glewGenVertexArrays.__name__, res_02))
Ich sehe dass Ausgabe nur Ausnahme Zugriffsverletzung hat.

Code: Alles auswählen

python main.py
glewInit returned: 1 <- OK
Traceback (most recent call last):
  File "C:\Users\DeafMan1983\PycharmProjects\Test\main.py", line 25, in <module>
    res_02 = __glewGenVertexArrays(1, cast(vaoID, GLuintPointer))
OSError: exception: access violation writing 0x000000006CBAFB08
Ich habe schon versucht und aber es liegt kein Erfolg mehr.

Mit freundlichen Grüßen
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Du kannst nicht irgendein beliebiges Objekt in ein GLuintPointer konvertieren. Das wird mit Sicherheit nur quatsch ergeben. Statt dessen mußt Du ein GLuint-Array erzeugen.

Code: Alles auswählen

GLuint = c_uint32
array = (GLuint*1)()
result = glewGenVertexArrays(1, array)
Auch bei ctypes ist ein *-Import ein No-Go.
DeafMan1983
User
Beiträge: 2
Registriert: Sonntag 24. April 2022, 15:27

Hmmm Ich habe schon versucht.

Code: Alles auswählen

from ctypes import *
from ctypes.wintypes import POINT

GLenum = c_uint # "GLenum = uint"
GLBoolean = c_bool # "GLBoolean = boolean"
GLSizei = c_int # "GLSizei = int"
GLuint = c_uint32

glewDLL = WinDLL("C:/vcpkg/installed/x64-windows/bin/glew32.dll")
glewExperimental = glewDLL.glewExperimental
glewExperimental.restype = GLBoolean

glewInit = glewDLL.glewInit
glewInit.restype = GLenum
res_01 = glewInit()
print("{:} returned: {:d}".format(glewInit.__name__, res_01))

__glewGenVertexArrays = glewDLL.__glewGenVertexArrays
__glewGenVertexArrays.argtypes = GLSizei, POINTER(GLuint)
__glewGenVertexArrays.restype = None

glewExperimental = True
glewInit()
vaoID = (GLuint*1)() # <- Ich habe eingefügt.
res_02 = __glewGenVertexArrays(1, vaoID)
print("{:} returned: {:d}".format(__glewGenVertexArrays.__name__, res_02))
Aber die Ausgabe zeigt wieder Fehler:

Code: Alles auswählen

python main.py
glewInit returned: 1
Traceback (most recent call last):
  File "C:\Users\DeafMan1983\PycharmProjects\Test\main.py", line 26, in <module>
    res_02 = __glewGenVertexArrays(1, vaoID)
OSError: exception: access violation writing 0x000000006CBAFB08
(venv) PS C:\Users\Jens\PycharmProjects\Test> 
Wieso ist Quatsch?
Antworten