LINUX.ORG.RU

[python-2.7][opengl][pygame]Не могу понять в чем дело

 


0

1

Вот модуль:

import pygame
from pygame.locals import *
import OpenGL
OpenGL.ERROR_LOGGING = False
from OpenGL.GL import *

def init(width = 640, height = 480):
    pygame.display.init()
    global _window
    _window = pygame.display.set_mode((640, 480), pygame.OPENGL|pygame.DOUBLEBUF)
    
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    ratio = float(width)/height
    if width<=height:
        glOrtho(.0, 400.0, .0, 400.0/ratio, 1.0, -1.0)
    else:
        glOrtho(.0, 400.0*ratio, .0, 400.0, 1.0, -1.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    glClearColor(.6, .6, .6, 1.0)
    glClear(GL_COLOR_BUFFER_BIT)
    
def test( polygon=((.0, .0),
                   (400.0, .0),
                   (.0, 400.0))):
    glBegin(GL_POLYGON)
    for i in polygon:
        glVertex2f(*i)
    glEnd()
    pygame.display.flip()
    
def test1( polygon=((400.0, 400.0),
                   (400.0, .0),
                   (.0, .0))):
    glBegin(GL_POLYGON)
    for i in polygon:
        glVertex2f(*i)
    glEnd()
    pygame.display.flip()
Запускаю так:
if __name__ == '__main__':
    gltest.init()
    gltest.test()
    gltest.test1()
    raw_input()

В этом случае отображается только gltest.test(), и больше pygame.display.flip() не работает, где я ошибся?
Спасибо!

★★★★★

все правильно работает, посмотри код еще раз, ты же делаешь флип дважды, первый кадр просто не успеваешь заметить, делай флип вконце всех методов, сечеш?

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Первый кадр остается и второй вообще не показывается, вот что я имел виду.
Иначе говоря, если флип сделать после glClear(), то вообще никакого кадра не будет.

deterok ★★★★★
() автор топика
Ответ на: комментарий от trashymichael

Не вариант, так как флип после одного применения больше вообще не работает.

deterok ★★★★★
() автор топика

Может попробует кто воспроизвести?

deterok ★★★★★
() автор топика

Переставил pygame и pyopengl, результат такой же, думаю скорее всего я накосячил...

deterok ★★★★★
() автор топика

Ну а если без флипа. А тупо glFlush или glSwapBuffers... или как оно там..

Bad_ptr ★★★★★
()
Ответ на: комментарий от trashymichael

Перечитайте код пожалуйста, буфер я не очищаю и в результате 2 треугольника должны наложиться.

deterok ★★★★★
() автор топика
Ответ на: комментарий от baverman

А у вас тоже выбивает:

X Error of failed request:  BadDrawable (invalid Pixmap or Window parameter)
  Major opcode of failed request:  128 (DRI2)
  Minor opcode of failed request:  8 (DRI2SwapBuffers		)
  Resource id in failed request:  0x400000f
  Serial number of failed request:  37
  Current serial number in output stream:  37
если убрать pygame.DOUBLEBUF

deterok ★★★★★
() автор топика

Переставил nouvea, сделал python-update, обновил систему, результат нулевой.

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Не знаю, как в ПиГейм-е создаётся ОпенЖЛ контекст.

А проверить можно по результатам вызовов функций ОпенЖЛ > 2.1

rip86oz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.