이 질문은 필자의 이전 버전을 반복하지만 일부 중요한 정보를 올바르게 복사하지 않았기 때문에 이전 버전이 실패한 것이므로 다시 실행해야합니다.pyglet을 구현하면 한 번 작동하는 프레임 버퍼 OpenGL 코드가 깨집니다.
OpenGL 함수 호출에 오류가 발생했습니다. 어쩌면 pyglet이 OpenGL을 제대로 초기화하지 못했을 수 있습니까?
이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])
오류는 다음과 같습니다 :이 오류는 이전에 근무하는 간단한 기능을 발생
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, surface.frame_buffer) ctypes.ArgumentError : 인수 2 :
잘못된 잘못된 유형 유형? 그렇다면 glGenFramebuffersEXT (1)가 잘못된 유형을 제공합니까? 왜 그랬을까요?
이 함수가 호출되기 전에 저는 게임을 관리하는 클래스 인스턴스를 초기화합니다. 여기에 초기화 방법이다 :
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')
표면 내가 pygame.Surface 클래스처럼 조금 역할을하지만, OpenGL은 텍스처를 사용하는 만든 클래스입니다.
그 방법은 Window와 OpenGL을 설정하고 (아마 문제는 아닌가?), 게임을 호출 한 후 setup_framebuffer 함수를 사용하여 텍스쳐로 렌더링하는 몇 가지 작업을 설정했다. 그렇다면 self.window.set_handler ('on_draw, self.game_loop)를했기 때문에 내 game_loop 메소드를 실행해야하는 pyglet.app.run()이 호출되었지만 내 게임이 충돌하기 전에 충돌합니다.
저는 처음으로 pyglet을 사용했습니다. 그 문서는 제가 잘못하고있는 것을 나에게 설명하지 않습니다. 누구든지 도와 줄 수 있습니까?
감사합니다.
왜 당신의 이전 질문을 편집하지? – genpfault
지금은 하루가 지난 이래로 누구든지 살펴볼 수 있습니까? 나는 이것을 A2 Computing 프로젝트에 사용하고 pyglet이 몇 가지 남은 문제를 해결할 수있는 유일한 방법 인 것 같아 미안하다. 이 작업을 수행하는 데 4 주가 밖에 걸리지 않으므로 테스트를 통해 글을 써야합니다. –
-1 중복 게시물의 경우 –