Здравствуйте, у меня есть эта ошибка в anaconda 3.7 и pycharm с pyglet.gl и ctypes (этот код взят из видео, за которым я следую)
Triangle2.py:
from pyglet.gl import *
import ctypes
class Triangle:
def __init__(self):
self.triangle = [-0.5, -0.5, 0.0, 1.0, 0.0, 0.0,
0.5, -0.5, 0.0, 0.0, 1.0, 0.0,
0.0, 0.5, 0.0, 0.0, 0.0, 1.0]
self.vertex_shader_source = b"""
#version 330
in layout(location = 0) vec3 position;
in layout(location = 1) vec3 color;
out vec3 newColor;
void main()
{
gl_Position = vec4(position, 1.0f);
newColor = color;
}
"""
self.fragment_shader_source = b"""
#version 330
in vec3 newColor;
out vec4 outColor;
void main()
{
outColor = vec4(newColor, 1.0f);
}
"""
vertex_buff = ctypes.create_string_buffer(self.vertex_shader_source)
c_vertex = ctypes.cast(ctypes.pointer(ctypes.pointer(vertex_buff)), ctypes.POINTER(ctypes.POINTER(GLchar)))
vertex_shader = glCreateShader(GL_VERTEX_SHADER)
glShaderSource(vertex_shader, 1, c_vertex, None)
glCompileShader(vertex_shader)
fragment_buff = ctypes.create_string_buffer(self.fragment_shader_source)
c_fragment = ctypes.cast(ctypes.pointer(ctypes.pointer(fragment_buff)), ctypes.POINTER(ctypes.POINTER(GLchar)))
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER)
glShaderSource(fragment_shader, 1, c_fragment, None)
glCompileShader(fragment_shader)
shader = glCreateProgram()
glAttachShader(shader, vertex_shader)
glAttachShader(shader, fragment_shader)
glLinkProgram(shader)
glUseProgram(shader)
vbo = GLuint(0)
glGenBuffers(1, vbo)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, 72, (GLfloat * len(self.triangle))(*self.triangle), GL_STATIC_DRAW)
#positions
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 24, ctypes.c_void_p(0))
glEnableVertexAttribArray(0)
#colors
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 24, ctypes.c_void_p(12))
glEnableVertexAttribArray(1)
Window2 .py:
from pyglet.gl import *
from Triangle2 import Triangle
class MyWindow(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.set_minimum_size(400, 300)
glClearColor(0.2, 0.3, 0.2, 1.0)
self.triangle = Triangle()
def on_draw(self):
self.clear()
glDrawArrays(GL_TRIANGLES, 0, 3)
def on_resize(self, width, height):
glViewport(0, 0, width, height)
if __name__ == "__main__":
window = MyWindow(1280, 720, "My Pyglet Window", resizable=True)
pyglet.app.run()
Вот ошибка:
Traceback (most recent call last):
File "D:/Pyglet_OpenGL_tutorials-master/Pyglet_OpenGL_tutorials-master/Video_04_shaders_the_long_way/Window2.py", line 22, in <module>
window = MyWindow(1280, 720, "My Pyglet Window", resizable=True)
File "D:/Pyglet_OpenGL_tutorials-master/Pyglet_OpenGL_tutorials-master/Video_04_shaders_the_long_way/Window2.py", line 10, in __init__
self.triangle = Triangle()
File "D:\Pyglet_OpenGL_tutorials-master\Pyglet_OpenGL_tutorials-master\Video_04_shaders_the_long_way\Triangle2.py", line 52, in __init__
glUseProgram(shader)
File "C:\Users\the1s\.conda\envs\pyrer\lib\site-packages\pyglet\gl\lib_wgl.py", line 107, in __call__
return self.func(*args, **kwargs)
File "C:\Users\the1s\.conda\envs\pyrer\lib\site-packages\pyglet\gl\lib.py", line 106, in errcheck
raise GLException(msg)
pyglet.gl.lib.GLException: b'invalid operation'
Я получил код с youtuber из github и сравнил его в pycharm с моим кодом. Они точно такие же и возвращают ту же ошибку. По этой причине я думаю, что это не опечатка, а что-то в модуле.