This question repeats my earlier one but my earlier one was a failure because I didn t copy some vital information correctly, so I have to redo it.
I m getting an error with a call to an OpenGL function. Maybe pyglet isn t initialising OpenGL correctly? The error happens with a simple function that worked before:
def setup_framebuffer(surface):
#Create texture if not done already
if surface.texture is None:
create_texture(surface)
#Render child to parent
if surface.frame_buffer is None:
surface.frame_buffer = glGenFramebuffersEXT(1)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, surface.frame_buffer)
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, surface.texture, 0)
glPushAttrib(GL_VIEWPORT_BIT)
glViewport(0,0,surface._scale[0],surface._scale[1])
glMatrixMode(GL_PROJECTION)
glLoadIdentity() #Load the projection matrix
gluOrtho2D(0,surface._scale[0],0,surface._scale[1])
The error is:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, surface.frame_buffer) ctypes.ArgumentError: argument 2: : wrong type
Wrong type? Then is glGenFramebuffersEXT(1) giving the wrong type now? Why would that be?
Before that function is called I initialise a class instance which manages my game. Here s the init method:
pyglet.options[ audio ] = ( alsa , openal , directsound , silent )
self.keys = [False] * 323
self.events = []
self.title = title
self.game_size = game_size
self.first_screen = (1280,720) #Take 120 pixels from the height because the menu bar, window bar and dock takes space
config = pyglet.gl.Config(alpha_size=8,double_buffer=True,sample_buffers=1,samples=4)
self.window = pyglet.window.Window(game_size[0],game_size[1],title,True,config=config)
self.window.set_handler( on_draw ,self.game_loop)
self.window.set_handler( on_resize ,self.reshaped)
self.window.set_handler( on_key_press ,self.keydown)
self.window.set_handler( on_key_release ,self.keyup)
self.window.set_handler( on_mouse_press ,self.mouse_func)
glViewport(0,0,self.first_screen[0],self.first_screen[1]) #Creates the viewport which is mapped to the window
glEnable(GL_BLEND) #Enable alpha blending
glEnable(GL_TEXTURE_2D) #Enable 2D Textures
glEnable(GL_MULTISAMPLE) #Enable Multisampling anti-aliasing
glEnable(GL_POLYGON_SMOOTH) #Enable antialiased polygons
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glMatrixMode(GL_PROJECTION)
glLoadIdentity() #Load the projection matrix
gluOrtho2D(0,1280,720,0) #Set an orthorgraphic view
self.game_gap = (0,0)
self.on_exit = on_exit
self.mod_key = 1024 if sys.platform == "darwin" else 64
Surface.__init__(self,game_size)
self.screen_change = True
self.frames = [time.time()]
self.fps = 60
self.last_time = 0
self.fade_surface = Surface([1280,720])
pyglet.font.add_file(os.path.dirname(sys.argv[0]) + "/NEUROPOL.ttf")
pyglet.font.load( NEUROPOL )
Surface is a class that I made which acts a bit like the pygame.Surface class but uses OpenGL textures.
That method sets up the Window and OpenGL (Probably not properly which is the problem?) and after calling it I set-up some things for my game which uses the setup_framebuffer function for rendering to textures. Then pyglet.app.run() is called which should hopefully run my game_loop method since I did self.window.set_handler( on_draw,self.game_loop) but my game crashes before it gets there.
This is the first time I ve use pyglet. The documentation doesn t explain to me what I m doing wrong. Can anyone help?
Thank you.