2023/12/31(日) [n年前の日記]
#1 [prog] glpngをMinGWでビルドできるか試してみた
OpenGLを利用する際に、テクスチャ画像を読み込むためのライブラリが必要になるけれど、昔は glpng というライブラリがあって、ソレを使うと png画像を読み込めた、という話を見かけたので気になってきた。
_glpng
Windows10 x64 22H2 + MiNGW (gcc 6.3.0)で、その glpng を利用できないか試してみた。
_glpng
Windows10 x64 22H2 + MiNGW (gcc 6.3.0)で、その glpng を利用できないか試してみた。
◎ ソースの入手 :
glpng のソースは、まだかろうじて、以下から入手できる模様。昔は他の場所でも配布されていたらしいのだけど…。
_森北出版株式会社刊 「Springs of C」サポートwebページ
_ Stunt Course (WebArchive)
_Index of /pub/OpenBSD/distfiles/glpng-1.45/
glpng.zip を入手して解凍。中に入ってた html を見る限り、バージョンは 1.45 (2000/07/10)らしい。2000年頃のライブラリなのか…。たしかに古い…。
_森北出版株式会社刊 「Springs of C」サポートwebページ
_ Stunt Course (WebArchive)
_Index of /pub/OpenBSD/distfiles/glpng-1.45/
glpng.zip を入手して解凍。中に入ってた html を見る限り、バージョンは 1.45 (2000/07/10)らしい。2000年頃のライブラリなのか…。たしかに古い…。
◎ ビルド :
src/ の中に入って、Makefile.LINUX を使ってビルドするのだけど、その前に、.c や .h の改行コードを統一しておいたほうがいいのかもしれない。
MinGW には dos2unix という、改行コードを CRLF から LF に変換するツールがパッケージとして用意されているので、それをインストールして、各フォルダで以下を実行したほうがいいのかも。
make でビルド。
../lib/ の中に、libglpng.a が作られる。これを MinGW で使える。
必要なのは以下のファイルだろうか。これらを、MinGW インストールフォルダの、include/ や lib/ にコピーする。
MinGW には dos2unix という、改行コードを CRLF から LF に変換するツールがパッケージとして用意されているので、それをインストールして、各フォルダで以下を実行したほうがいいのかも。
dos2unix *.c dos2unix *.h
make でビルド。
make -f Makefile.LINUX
../lib/ の中に、libglpng.a が作られる。これを MinGW で使える。
必要なのは以下のファイルだろうか。これらを、MinGW インストールフォルダの、include/ や lib/ にコピーする。
GL/glpng.h libglpng.a
◎ サンプルプログラムをビルド :
Example/ の中にはサンプル Test.c があるので、ビルドして .exe が作れるか試してみた。ビルドには、glut か freeglut が必要。
ただ、Test.c は若干修正が必要らしい。diff の結果を貼っておく。
行頭に「-」がついているのが元の記述。「+」がついているのが変更後の記述。
一応、修正後の test.c も置いておく。
_test.c
_stunt.png
Makefile は以下。
_Makefile
make を実行。Test.exe が作られた。
Test.exe を実行すると、png画像の Stunt.png を読み込んで、OpenGL のポリゴンにテクスチャとして貼り付けた状態で表示された。
たしかに、png画像を読み込んで、OpenGL のテクスチャとして利用できた。
libpng を使う事例と比べると、圧倒的に記述が少なくて済む。もっとも、glpng も実際の処理は zlib と libpng を使ってるらしいけど…。
ただ、Test.c は若干修正が必要らしい。diff の結果を貼っておく。
> diff -u Test.c.orig Test.c --- Test.c.orig 2023-12-31 01:53:10 +0900 +++ Test.c 2023-12-31 02:17:00 +0900 @@ -6,8 +6,8 @@ * http://www.wyatt100.freeserve.co.uk/download.htm */ -#include <gl/glpng.h> -#include <gl/glut.h> +#include <GL/glut.h> +#include <GL/glpng.h> #include <stdlib.h> int angle = 0; @@ -64,10 +64,11 @@ /***** Main function *****/ -void main() { +int main(int argc, char** argv) { pngInfo info; GLuint texture; + glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(300, 300); glutCreateWindow("glpng test"); @@ -107,4 +108,6 @@ glutReshapeFunc(Reshape); glutMainLoop(); + + return EXIT_SUCCESS; }
行頭に「-」がついているのが元の記述。「+」がついているのが変更後の記述。
- 「gl/」は「GL/」に変更。
- glpng.h, glut.h の順ではなく、glut.h, glpng.h の順で include。
- void main() は int main(int argc, char** argv) に。
- glutInit(&argc, argv); を追加。
- main() の最後で返り値を戻すようにする。
一応、修正後の test.c も置いておく。
_test.c
_stunt.png
Makefile は以下。
_Makefile
Test.exe: Test.c Makefile gcc Test.c -o Test.exe -lglpng -DFREEGLUT_STATIC -lfreeglut_static -lglu32 -lopengl32 -lwinmm -lgdi32 .PHONY: clean clean: rm -f *.exe rm -f *.o-lglpng のほうが、glut 関係より先に記述されてないといかんらしい。
make を実行。Test.exe が作られた。
Test.exe を実行すると、png画像の Stunt.png を読み込んで、OpenGL のポリゴンにテクスチャとして貼り付けた状態で表示された。
たしかに、png画像を読み込んで、OpenGL のテクスチャとして利用できた。
libpng を使う事例と比べると、圧倒的に記述が少なくて済む。もっとも、glpng も実際の処理は zlib と libpng を使ってるらしいけど…。
glpng [Ben Wyatt] (Win32, etc.) - all versions; read-only;
requires libpng and zlib; freeware (zlib license) with source.
(This is a utility library to load PNG images and bind them to OpenGL textures.
Reportedly it is also a good general-purpose example of how to use textures in OpenGL.
As of early 2000, it still includes the source code for libpng 1.0.2 and zlib 1.1.3, plus a static Win32 library [glpng.lib].)
◎ 参考ページ :
_WSLでGLUT&glpng Test.cの実行まで Windows10 - Qiita
_OpenGL(GLUT) 〜PNG for glpng〜 (WebArchive)
_OpenGLでpng表示 - ぱすかるの徒然草
_macOS 上で glpng をコンパイルして動かす
_PNG画像を表示する(glpng) - OpenGLプログラミングメモ - atwiki(アットウィキ)
_Windows Subsystem for Linux(Bash on Ubuntu on Windows)でOpenGL(GLUT)を使う時のメモ - 駅から徒歩27分
_GLPNGをVisualStudio.net2005で使う方法 - SourceChord
_OpenPorts.se | The OpenBSD package collection (WebArchive)
_JVNDB-2010-003995 - JVN iPedia - 脆弱性対策情報データベース
_PNG-supporting Libraries and Toolkits
_OpenGL(GLUT) 〜PNG for glpng〜 (WebArchive)
_OpenGLでpng表示 - ぱすかるの徒然草
_macOS 上で glpng をコンパイルして動かす
_PNG画像を表示する(glpng) - OpenGLプログラミングメモ - atwiki(アットウィキ)
_Windows Subsystem for Linux(Bash on Ubuntu on Windows)でOpenGL(GLUT)を使う時のメモ - 駅から徒歩27分
_GLPNGをVisualStudio.net2005で使う方法 - SourceChord
_OpenPorts.se | The OpenBSD package collection (WebArchive)
_JVNDB-2010-003995 - JVN iPedia - 脆弱性対策情報データベース
_PNG-supporting Libraries and Toolkits
[ ツッコむ ]
以上です。