【OpenGL】Eclipse CDT+GLFW+ImGuiをやってみた。
Visual Studio?いいえEclipseです
しゃーないやん。インスコ禁止なPC上でどうにかしたいんだから。
というわけで、統合環境はEclipseを選択。
ググって探してさぁ大変
うん。VSでの環境構築や、Macでの準備記事はあるけど、Eclipseはないのね。
Eclipse CDTってそんなにみんな使わないのか?
そうは言っても
今ある環境でどうにかするしかないので、やらなくてはね。
それで環境は?
OS : Windows 64bit
Eclipse : Pleiades All in One 2019 C/C++ Windows 64bit Full Edition ( https://mergedoc.osdn.jp/ )
まずは、下準備だよね。
Eclipseのダウンロードとか解凍とかもろもろは、世に溢れ返ってるので割愛。
とりあえず、テキトーにプロジェクトを作成。選ぶのはC++管理ビルド。
CMake?ナニソレオイシイノ?
ソースフォルダを追加し、フォルダ構成をこんな感じに。(この辺は個人の自由)
とりあえず下準備はここまで。
GLFWを準備しよう
ここ からダウンロード。選ぶのは 64-bit Windows binaries。
解凍後、include 内の GLFW フォルダを eclipse¥mingw¥x86_64-w64-mingw32¥inclue 内にまるっとコピー。
lib-mingw-w64 フォルダの glfw3.dll を eclipse¥mingw¥x86_64-w64-mingw32¥bin にコピー。libglfw3.a、libglfw3dll.a を eclipse¥mingw¥x86_64-w64-mingw32¥lib にコピー
ImGuiを準備しよう
ImGuiは GitHub からダウンロード。
解凍後、プロジェクト上に作ったフォルダに各ファイルをコピー。
imgui-master直下の選択してるファイル(画像参照)をプロジェクトのimguiフォルダにコピー
backendsフォルダの選択しているファイル(画像参照)をプロジェクトのimguiフォルダにコピー
exsamples¥libs¥gl3w¥GLの各ファイル(画像参照)をプロジェクトのgl3wフォルダにコピー
最終的にプロジェクトのファイルがこんな感じになればオーケー。
ここでちょっと手入れ。
このままだと、gl3w.cのコンパイル時にエラーがでるので、includeのパスを修正する。
//#include <GL/gl3w.h>
#include "gl3w.h"
//#include <GL/glcorearb.h>
#include "glcorearb.h"
プロジェクトの設定って大事だよね
さて、下準備は完了。さぁ。コードを書くぞー!
の前に
もう一つ、大事な作業。
そう、プロジェクトの設定。プリプロセッサやリンク設定をしておかないと、コンパイラさんやリンカさんに怒られちゃいます。なので、いろいろと設定を。
まずは、gl3wを使うためにプリプロセッサを設定。
IMGUI_IMPL_OPENGL_LOADER_GL3W を追加。
つぎに、ライブラリを追加。
このライブラリは、ImGuiのサンプルプログラム example_glfw_opengl3 フォルダ内のMakeファイルに記載されているものを追加。
ifeq ($(findstring MINGW,$(UNAME_S)),MINGW)
ECHO_MESSAGE = "MinGW"
LIBS += -lglfw3 -lgdi32 -lopengl32 -limm32
CXXFLAGS += `pkg-config --cflags glfw3`
CFLAGS = $(CXXFLAGS)
これでプロジェクト設定も完了。
そして伝説...ゲフンゲフン。 テストへ
ここまで来れば、使えるはず。
ということで、テストコード。
#include <GL/gl3w.h>
#include <GLFW/glfw3.h>
#include "imgui/imgui.h"
#include "imgui/imgui_impl_glfw.h"
#include "imgui/imgui_impl_opengl3.h"
//
// エントリーポイント
//
GLint main( GLint argc, GLchar** argv )
{
if ( !glfwInit() )
{
return -1;
}
const char* glsl_version = "#version 400";
glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 0 );
GLFWwindow* window = glfwCreateWindow( 640, 480, "test", NULL, NULL );
if( !window )
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent( window );
glfwSwapInterval( 1 );
gl3wInit();
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); ( void )io;
ImGui::StyleColorsDark();
ImGui_ImplGlfw_InitForOpenGL( window, true );
ImGui_ImplOpenGL3_Init( glsl_version );
while( !glfwWindowShouldClose( window ) )
{
glfwPollEvents();
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
ImGui::Begin( "Hello, world!" );
ImGui::Text( "This is some useful text." );
ImGui::End();
ImGui::Render();
int display_w, display_h;
glfwGetFramebufferSize( window, &display_w, &display_h );
glClearColor( 0.8f, 0.8f, 0.8f, 0.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glViewport( 0, 0, display_w, display_h );
ImGui_ImplOpenGL3_RenderDrawData( ImGui::GetDrawData() );
glfwSwapBuffers( window );
}
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
glfwDestroyWindow( window );
glfwTerminate();
return 0;
}
はい。完了です。
終わってみての所感
最初はエラー出まくりでどーしたもんかなーと思ったけど、Makefile見ればどう設定すればいいか、あらかた書いてあったのですね。
とりあえず環境構築はできたので、これからいろいろと遊んでいきたいと思います。
最後に
今回、参考にさせていただいたサイトを。
・OpenGLやDirectXなGUIにimguiが最強すぎる https://qiita.com/Ushio/items/446d78c881334919e156
・Visual StadioでOpenGLとImGuiを使ってみる https://qiita.com/maaiikanji/items/46df315e09a47743bb36
Author And Source
この問題について(【OpenGL】Eclipse CDT+GLFW+ImGuiをやってみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/kuro_toro_cat/items/c0006a22e07ae52eb488著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .