mieki256's diary



2022/09/08(木) [n年前の日記]

#3 [prog][windows] MinGWでfreeglutを使ってみた

Windows10 x64 21H2 + MinGW (gcc 9.2.0) で freeglut を使ってみたい。

freeglut というのは、OpenGL を多少は簡単に使えるようにしてくれるツールキット。元々は GLUT というツールキットがあったのだけど、バグがまだあるのに開発が止まって放置状態になったそうで、その代替として登場したのが freeglut らしい。

さておき。あくまで MinGW (gcc 9.2.0) を使って作業してみる。MinGW-w64 (+ MSYS2) ではなくて、MinGW (+ MSYS)。

MinGW についてはインストール済みで、既に利用できる状態になっているものとする。

freeglutのバイナリの入手。 :

以下のページが参考になった。

_MinGW + OpenGL - 日々量産
_freeglut Windows Development Libraries

上記の英語ページの、freeglut 3.0.0 MinGW Package と書いてあるところの少し下、Download freeglut 3.0.0 for MinGW をクリックして、freeglut-MinGW-3.0.0-1.mp.zip を入手する。

MinGWの中にコピー。 :

freeglut-MinGW-3.0.0-1.mp.zip を解凍すると、bin/, include/, lib/ というフォルダがあるので、中に入ってるファイル群を、MinGWインストールフォルダ内の同名フォルダの中にコピーする。ちなみに、x64 というフォルダも入ってるけれど、それは64bit用。MinGW は 32bit なので、x64フォルダの中身は無視していい。

今回は以下のファイルをコピーした。
bin/freeglut.dll

include/GL/freeglut.h
include/GL/freeglut_ext.h
include/GL/freeglut_std.h
include/GL/glut.h

lib/libfreeglut.a
lib/libfreeglut_static.a

ちなみに、MSYS2 + MinGW-w64 を使っている場合は、パッケージとして freeglut が用意されているので、pacman を使ってインストールができるらしい。

_Base Package: mingw-w64-freeglut - MSYS2 Packages
_Package: mingw-w64-x86_64-freeglut - MSYS2 Packages
_Package: mingw-w64-i686-freeglut - MSYS2 Packages

使ってみる。 :

使い方は以下で説明されてる。

_Using freeglut or GLUT with MinGW

以下で配布されてるサンプルを利用して、コンパイルできるか試してみる。

_TransmissionZero/Hello-GLUT: A very simple "Hello World!" GLUT application demonstrating how to write OpenGL applications in C with MinGW and MSVC.

上記のサンプルは3ファイルに分かれているけど、別に1ファイルでもいいよなと思えてきた。修正して、1ファイルにしてみた。

_hello_glut.c
#include <stdlib.h>
#include <GL/glut.h>

/* Keyboard callback function */
void keyboard(unsigned char key, int x, int y)
{
  switch (key)
    {
      /* Exit on escape key press */
      case '\x1B':
      {
        exit(EXIT_SUCCESS);
        break;
      }
    }
}

/* Display callback function */
void display()
{
  glClear(GL_COLOR_BUFFER_BIT);

  /* Display a red square */
  glColor3f(1.0f, 0.0f, 0.0f);

  glBegin(GL_POLYGON);
  glVertex2f(-0.5f, -0.5f);
  glVertex2f(0.5f, -0.5f);
  glVertex2f(0.5f,  0.5f);
  glVertex2f(-0.5f,  0.5f);
  glEnd();

  glFlush();
}

/* Main method */
int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  /* Create a single window with a keyboard and display callback */
  glutCreateWindow("GLUT Test");
  glutKeyboardFunc(&keyboard);
  glutDisplayFunc(&display);

  /* Run the GLUT event loop */
  glutMainLoop();

  return EXIT_SUCCESS;
}


コンパイルは以下。hello_glut.exe が生成される。
# スタティックリンクしない場合。

gcc hello_glut.c -o hello_glut.exe -lfreeglut -lopengl32 -lwinmm -lgdi32 -mwindows

# スタティックリンクする場合。

gcc hello_glut.c -o hello_glut.exe -D FREEGLUT_STATIC -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -mwindows
  • スタティックリンクしない場合は、実行ファイルのサイズは小さくなるけれど、動作には freeglut.dll が必要になる。
  • スタティックリンクする場合は、実行ファイルが freeglut.dll の中身を含んでいるので、freeglut.dll が無くても動く。ファイルサイズは少し大きくなる。

hello_glut.exe を実行して、赤い四角が表示されたらOK。ちなみに、ESCキーを押すとウインドウが閉じる。

ss_hello_glut.png

これで、freeglutを使っているCソースを、MinGWでコンパイル/ビルドできる状態になった。

以上です。

過去ログ表示

Prev - 2022/09 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project