2016-07-29 21 views
5

私はPythonとPyGameを使ってOpenGLを使い始めています。GLUTではなくPyGameでOpenGLコンテキストを初期化するには

私は正確にOpenGLのバージョンを指定しない限り、しかし、私のシェーダは、コンパイルに失敗しているなど、すべての初期化、窓の開口部、入力取り扱いを行う代わりに、GLUTのpygameのダウンロードを使用するように

をつもりだし、プロフィール。

彼らはは本からGLUTの初期設定でコンパイルしない

glutInit() 
glutInitDisplayMode(GLUT_RGBA) 
glutInitWindowSize(400, 400) 

# this is what I need 
glutInitContextVersion(3, 3) 
glutInitContextProfile(GLUT_CORE_PROFILE) 

glutCreateWindow("main") 

しかし、このような単純なpygameのダウンロードの初期化と:

正確なOpenGLのバージョン3.3を指定し、CORE_PROFILEいない
pygame.init() 
display = (400, 400) 
pygame.display.set_mode(display, pygame.DOUBLEBUF|pygame.OPENGL) 

、 シェイダーのコンパイル時に同じプログラムが失敗する:

RuntimeError: ('Shader compile failure (0): 0:2(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES\n', ['\n #version 330 core\n layout(location = 0) in vec4 position;\n void main()\n {\n gl_Position = position;\n }\n '], GL_VERTEX_SHADER)

私の質問は:どのように私はPyGameでこの初期化を行うのですか?

+0

これを解決しましたか? – Oly

答えて

0

私はこれだと思う:

https://gist.github.com/MorganBorman/4243336

は、あなたが探してどのようなことがあります。 PygameとPyOpenGLで頂点シェーダとフラグメントシェーダを使用する方法を示します。あなたがPyOpenGLを使用していないなら、あなたはする必要があります。それをダウンロードするには、単に実行します。ターミナルコマンドプロンプトで

pip install PyOpenGL

を/

それは、私はより多くの詳細についてはPyOpenGLインストールページでご覧になることをお勧めします動作しない場合:

http://pyopengl.sourceforge.net/documentation/installation.html

私はリンクからコードのいくつかを使ってあなたがしようとしていると思うものの短い煮詰めた例を含めました。

import OpenGL.GL as GL 
import OpenGL.GL.shaders 
import pygame as pg 


#-------------not my code, credit to: Morgan Borman--------------# 
vertex_shader = """ 
#version 330 
in vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 
""" 

fragment_shader = """ 
#version 330 
void main() 
{ 
    gl_FragColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); 
} 
""" 
#----------------------------------------------------------------# 

def main(): 
    pg.init() 

    #-------------not my code, credit to: Morgan Borman--------------# 
    GL.glClearColor(0.5, 0.5, 0.5, 1.0) 
    GL.glEnable(GL.GL_DEPTH_TEST) 

    shader = OpenGL.GL.shaders.compileProgram(
     OpenGL.GL.shaders.compileShader(vertex_shader, GL.GL_VERTEX_SHADER), 
     OpenGL.GL.shaders.compileShader(fragment_shader, GL.GL_FRAGMENT_SHADER) 
    ) 
    #----------------------------------------------------------------# 

    DISPLAY_DIMENSIONS = (640, 480) 
    display = pg.display.set_mode(DISPLAY_DIMENSIONS, pg.DOUBLEBUF | pg.OPENGL) 
    clock = pg.time.Clock() 
    FPS = 60 

    while True: 
     clock.tick(FPS) 
     for e in pg.event.get(): 
      if e.type == pg.QUIT: 
       return 


     pg.display.flip() 

if __name__ == '__main__': 
    try: 
     main() 
    finally: 
     pg.quit() 

パイゲームではロードシェイダー以外は何もしません。あなたの主な目標は私が信じていることです。

+0

これは問題を解決していないか、リンクされた要点です。コア・プロファイルを設定して、パイ・ゲームの仕方を設定する必要があると考えてください – Oly

関連する問題