mieki256's diary



2023/12/31() [n年前の日記]

#1 [prog] glpngをMinGWでビルドできるか試してみた

OpenGLを利用する際に、テクスチャ画像を読み込むためのライブラリが必要になるけれど、昔は glpng というライブラリがあって、ソレを使うと png画像を読み込めた、という話を見かけたので気になってきた。

_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年頃のライブラリなのか…。たしかに古い…。

ビルド :

src/ の中に入って、Makefile.LINUX を使ってビルドするのだけど、その前に、.c や .h の改行コードを統一しておいたほうがいいのかもしれない。

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 の結果を貼っておく。
> 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 のポリゴンにテクスチャとして貼り付けた状態で表示された。

ss_glpng_test.png

たしかに、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].)

PNG-supporting Libraries and Toolkits より

参考ページ :

#2 [nitijyou] 弟が帰省

夕方の犬の散歩から帰ってきたら到着してた。たぶん 16:30頃に着いてたのかな…。

#3 [nitijyou] 日記をアップロード

2023/12/04を最後に日記をアップロードしてなかったのでアップロード。

以上、1 日分です。

過去ログ表示

Prev - 2023/12 - 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
31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project