OpenGLはバージョンによって可能な操作に微妙な差があったりしますので、現在実行中のOpenGLコンテキストのバージョンや、どのようなエクステンションが備わっているかに注意する必要があります。
バージョンやエクステンションはglGetStringで調べることができます(エクステンションはバージョン3.0以降はglGetStringiで取得する仕様になりましたので、うまくいかない場合こちらもお試しください)。
また、OpenGLはプログラマ側からエラーを問い合わせない限り、何も報告せずに描画してくれないというようなことがしばしばありますので(パフォーマンス上の理由からのようです)、glGetErrorでエラーの有無を調べ、戻ってきたGLenum(もし最後にglGetErrorを実行してから後に何らかのエラーが起こっていた場合、GL_NO_ERROR以外の値になります)を、gluErrorStringなどに渡して詳しいエラーメッセージを得る...といった面倒な手順が必要になるかと思います。
こういったデバッグに有用な定型作業は関数としてひとまとめにして、適宜疑わしい部分でチェックするといいでしょう。
OpenGLのバージョンとエクステンションの一覧が分かれば、もう少し詳しく回答を申し上げられるかもしれません。
[追記]
クラス AppBase の実装 — 読書ノート v1.4.0devに例示されているコードにバージョンを確認する部分が含まれていました。ご参考になりますでしょうか。こちらのサイト、他のページにも色々情報が載っており、なかなか役立ちそうです。
def init_glut(self, args):
"""Initialize the GLUT state."""
# Initialize GLUT.
GLUT.glutInit(args)
GLUT.glutInitContextVersion(
self.context_version[0], self.context_version[1])
GLUT.glutInitContextFlags(GLUT.GLUT_FORWARD_COMPATIBLE)
GLUT.glutInitContextProfile(GLUT.GLUT_CORE_PROFILE)
GLUT.glutSetOption(
GLUT.GLUT_ACTION_ON_WINDOW_CLOSE,
GLUT.GLUT_ACTION_GLUTMAINLOOP_RETURNS)
# Initialize and create the main window.
GLUT.glutInitDisplayMode(
GLUT.GLUT_DOUBLE | GLUT.GLUT_RGBA | GLUT.GLUT_DEPTH)
GLUT.glutInitWindowSize(
self.window_size[0], self.window_size[1])
GLUT.glutInitWindowPosition(
self.window_position[0], self.window_position[1])
GLUT.glutCreateWindow(self.window_title)
GLUT.glutDisplayFunc(self.render)
GLUT.glutIdleFunc(self.idle)
GLUT.glutReshapeFunc(self.resize)
GLUT.glutKeyboardFunc(self.keyboard)
GLUT.glutTimerFunc(0, self.timer, 0)
GLUT.glutMouseFunc(self.mouse)
GLUT.glutMotionFunc(self.motion)
GLUT.glutCloseFunc(self.cleanup)
aspects = [('Vendor', GL.GL_VENDOR),
('Renderer', GL.GL_RENDERER),
('Version', GL.GL_VERSION),]
if self.context_version[0] > 1:
aspects.append(('GLSL', GL.GL_SHADING_LANGUAGE_VERSION))
for i in aspects:
print('{}: {}'.format(i[0],
GL.glGetString(i[1]).decode()),
file=sys.stderr, flush=True)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/04 09:18
2017/06/04 10:07
2017/06/04 12:51
2017/06/04 21:03