OpenGl アプリケーションを構築しようとしています。最初に、古い固定関数パイプラインを描画に使用しました。その後、これが時代遅れであることに気付き、プログラマブル パイプラインに切り替えたいと考えました。この目的のために、Web 上のいくつかのチュートリアルを使用しました。コードを変更した後、コンパイルしようとしましたが、コンパイラは glShaderSource、glCompileShader、glCreateProgram、glAttachShader、glLinkProgram などの (コア プロファイル?) 関数を見つけることができませんでした。ウィンドウ管理などにGLFWライブラリを使用していませんが、xlibを使用しています。
glxinfo | grep OpenGl は以下を出力しています:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 675M/PCIe/SSE2
OpenGL core profile version string: 4.3.0 NVIDIA 331.113
OpenGL core profile shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.4.0 NVIDIA 331.113
OpenGL shading language version string: 4.40 NVIDIA via Cg compiler
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
プロプライエタリな Nvidia ドライバーとオープン ソース ドライバーの両方を試しましたが、問題は解決しませんでした。
次の方法で OpenGl ヘッダーをインクルードします。
#include <GL/gl.h>
#include <GL/glx.h>
コンパイル エラー出力の一部を次に示します。
In file included from main.cpp:1:0:
../../gui/iml/app.window.h: In constructor ‘gui::iml::AppWindow::AppWindow()’:
../../gui/iml/app.window.h:65:52: error: ‘glCreateShader’ was not declared in this scope
fragmentShader = glCreateShader(GL_VERTEX_SHADER);
^
../../gui/iml/app.window.h:66:47: error: ‘glShaderSource’ was not declared in this scope
glShaderSource(vertexShader,1,&vshader,NULL);
^
../../gui/iml/app.window.h:67:32: error: ‘glCompileShader’ was not declared in this scope
glCompileShader(vertexShader);
^
../../gui/iml/app.window.h:72:38: error: ‘glCreateProgram’ was not declared in this scope
GLuint sprogram = glCreateProgram();
^
../../gui/iml/app.window.h:73:50: error: ‘glAttachShader’ was not declared in this scope
glAttachShader(this->shaderProg,fragmentShader);
^
../../gui/iml/app.window.h:75:34: error: ‘glLinkProgram’ was not declared in this scope
glLinkProgram(this->shaderProg);
デバッグ用に作成したテスト プログラムを次のようにコンパイルします。
g++ -Wall -Winline -DDEBUG main.cpp -I ../../gui/ -o debug -lX11 -lGL -lGLU -pthread -std=c++11
単純でばかげた間違いを犯したと思いますが、わかりません...
編集: gl.h ファイルを調べたところ、Mesa プロジェクトからのものであることがわかりました。
/*
* Mesa 3-D graphics library
*
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. All Rights Reserved.
*
これは Nvidia ドライバーのヘッダー ファイルではないでしょうか?
解決済み:
ここから gl3.h ヘッダー ファイルをダウンロードする必要がありました: https://www.khronos.org/registry/gles/api/old/3.0/gl3.hを /usr/include/GL/ に移動し ます
次に、次の方法で OpenEs 開発ファイルをインストールしました。
sudo apt-get install libgles2-mesa-dev
そして今、プログラムがコンパイルされます!