pyglet отображает фигуры только после использования дополнительной команды рисования

#python #opengl #pyglet

#python #opengl #pyglet

Вопрос:

Pyglet, Windows 10. При включении sample_buffers , чтобы получить более красивые рисунки, я столкнулся со следующей проблемой. Я вижу любые фигуры, которые я рисую batch , используя (в данном случае одну строку), только когда присутствует дополнительная строка, как показано ниже. Когда она есть batch , содержимое отображается. Когда ее там нет, ничего не отображается.

Когда config не используется, в этой дополнительной строке нет необходимости.
Код сокращен до минимума, где появляется это поведение. Я подозреваю, что в моей конфигурации чего-то не хватает. Я уже пытался получить начальную конфигурацию через screen.get_best_config . Никаких изменений.

 import pyglet
from pyglet import shapes

config = pyglet.gl.Config(sample_buffers=1, samples=8, double_buffer=False)
window = pyglet.window.Window(960, 540,config=config, resizable=True) 

batch = pyglet.graphics.Batch()
line = shapes.Line(100, 100, 50, 200, width=19, batch=batch)

@window.event
def on_draw():
    window.clear()
    batch.draw()
    pyglet.graphics.draw(2, pyglet.gl.GL_LINES,('v2i', (10, 15, 300, 305)))  #without this line nothing is displayed     
    
pyglet.app.run()
  

Ответ №1:

Если вы отключите двойную буферизацию ( double_buffer=False — см. pyglet.gl ), Вы должны вручную принудительно выполнить команды GL с помощью glFlush :

 import pyglet
from pyglet import shapes

config = pyglet.gl.Config(sample_buffers=1, samples=8, double_buffer=False)
window = pyglet.window.Window(960, 540,config=config, resizable=True) 

batch = pyglet.graphics.Batch()
line = shapes.Line(100, 100, 50, 200, width=19, batch=batch)

@window.event
def on_draw():
    window.clear()
    batch.draw()
    pyglet.gl.glFlush()  
    
pyglet.app.run()
  

Комментарии:

1. Я искал в разных местах. Для меня проблема появляется с или без double_buffer значения False. Но ваше предложение работает идеально.