mieki256's diary



2024/02/22(木) [n年前の日記]

#1 [prog] Premakeをインストールした

OpenGL利用時に、テクスチャの読み込みを簡単にしてくれる、soil(Simple OpenGL Image Library)というライブラリがある。

_lonesock.net: SOIL (WebArchive)
_littlstar/soil: Simple OpenGL Image Library
_SpartanJ/SOIL2: SOIL2 is a tiny C library used primarily for uploading textures into OpenGL.


この soil2 をビルドする際に premake なるツールが必要になるらしいので、Windows10 x64 22H2上でインストールしてみた。

_What is Premake? | Premake
_Download | Premake

premake-5.0.0-beta2-windows.zip を入手して解凍。中には複数のファイルが入っていた。
example.dll
example.exp
example.lib
example.pdb
luasocket.dll
luasocket.exp
luasocket.lib
luasocket.pdb
premake5.exe
premake5.pdb

今回は、D:\Dev\premake\ に置いてみた。

premakeadd.bat というbatファイルを作って、使いたい時だけ環境変数PATHに追加するようにしておいた。
@echo off
set PREMAKEPATH=D:\Dev\premake
set PATH=%PREMAKEPATH%;%PATH%
echo Premake enable.
echo Add Path [%PREMAKEPATH%]

さておき。premake を使う時は、premake.exe ではなくて、premake5.exe というファイル名で呼び出せばいいのだろうか。
> premakeadd.bat
Premake enable.
Add Path [D:\Dev\premake]

> premake5 --version
premake5 (Premake Build Script Generator) 5.0.0-beta2

MSYS2のパッケージがあった :

インストールした後で気づいたけど、MSYS2 でパッケージが用意されていた…。そっちをインストールすれば済んだかも…。
$ pacman -S mingw-w64-i686-premake mingw-w64-i686-premake4 mingw-w64-x86_64-premake mingw-w64-x86_64-premake4

$ which premake
which: no premake in 

$ which premake5
/mingw64/bin/premake5

$ which premake4
/mingw64/bin/premake4

$ premake5 --version
premake5 (Premake Build Script Generator) 5.0.0-dev

$ premake4 --version
premake4 (Premake Build Script Generator) 4.3

#2 [prog] soil2をビルド

OpenGLで、テクスチャ画像のロードを楽にする、soli (または soil2) というライブラリがある。

_lonesock.net: SOIL (WebArchive)
_littlstar/soil: Simple OpenGL Image Library
_SpartanJ/SOIL2: SOIL2 is a tiny C library used primarily for uploading textures into OpenGL.

soil2 を Windows10 x64 22H2 + MSYS2 + mingw64 でビルドできるか試してみた。

ビルド :

README.md 通りに作業していけば問題無いけど一応メモ。

Makefile を作るために Premake なるツールが必要になる。MSYS2の場合はパッケージが用意されているのでそれをインストールすればいい。ちなみに、MSYS2 上では pacman -Ss hoge でパッケージの検索ができて、pacman -S hoge でインストールできる。
$ pacman -Ss premake

$ pacman -S mingw-w64-i686-premake mingw-w64-i686-premake4 mingw-w64-x86_64-premake mingw-w64-x86_64-premake4

git clone を使って、github から soil2 のソース一式を入手する。任意のフォルダで以下を実行。
git clone https://github.com/SpartanJ/SOIL2.git
cd SOIL2

premake5を使って、Makefile を作る。
premake5 gmake2

make/windows/ というフォルダが作成されて、その中に色んな Makefile が作成された。中に入る。
cd make/windows

makeを呼び出す際、config=xxxx と指定することで、以下の版の .dll、.lib が作れるらしい。
release_x86
release_x86_64
debug_x86
debug_x86_64

makeと打ってビルドする。MinGW64-x85_64 で作業していたので、x86_64 を選んでみた。
make config=release_x86_64

../../lib/windows/ 内に、以下の2つのファイルが生成された。
soil2.dll
soil2.lib

更に、../../bin/ 内に、以下の2つの実行サンプルも生成された。動作には SDL2 が必要らしい。
soil2-perf-test-release.exe
soil2-test-release.exe

SDL2 は、MSYS2ならパッケージで用意されているのでインストールできる。
$ pacman -Ss SDL2

$ pacman -S mingw-w64-i686-SDL2 mingw-w64-x86_64-SDL2

先ほど生成した 実行サンプルを実行してみる。色々なdllを要求されるけど、ひとまず、先ほど生成した soil2.dll を bin/ にコピー。他のdllは、MinGW64 の bin/ にパスが通っている状態なら、そちらから読み込んでくれる。
cd ../../bin/
./soil2-test-release.exe
./soil2-perf-test-release.exe
  • soil2-test-release.exe ... ウインドウが表示されて画像が描画された。
  • soil2-perf-test-release.exe ... 画像群を読み込んで、かかった時間が表示された。




ということで、Windows10 x64 22H2 + MSYS2 で soil2 をビルドすることができると分かった。

MinGW64-x86_64 (64bit版) ではなく、MinGW64-i686 (32bit版) でも試してみた。そちらも同様に動いてくれた。.dll と .lib も生成された。

実行サンプルに必要なdll :

soil2-test-release.exe が要求するdllは以下。
$ objdump -p soil2-test-release.exe | grep dll
        DLL Name: soil2.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: SDL2.dll
        DLL Name: SHELL32.dll
        DLL Name: libstdc++-6.dll

つまり、以下のdllが別途必要になる。
libgcc_s_dw2-1.dll
libstdc++-6.dll
SDL2.dll
soil2.dll

soil2.dll 以外は、msys64/mingw64/bin/ の中からコピーしてくれば良さそう。bin/ に各dllをコピーしてみたら、MSYS2等にパスが通ってない状態でも soil2-test-release.exe が実行できた。

#3 [basic] FreeBASICでsoilを使ってみる

FreeBASIC は、CPUによるソフトウェア処理の描画とは別に、OpenGLを使ったハードウェア処理による描画もできる。しかし、OpenGL を使う際にネックになるのが、テクスチャ画像の読み込みと変換。OpenGL自体には、テクスチャ画像ファイルを読み込んで、テクスチャとして使える形に変換してくれる機能が無い。そのあたりは自分で処理を書かないといけない。

FreeBASICの公式掲示板を眺めていたら、soil (libsoil) を使って、このあたりを楽に行う方法が紹介されていた。

_Simple OpenGL Image Library Windows/Linux 32/64-bit - freebasic.net

興味が湧いたので試用してみることにした。環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。

関連ファイルを入手 :

前述のページから、libsoil.zip を入手する。解凍すると、中には以下のファイルが入っている。
libsoil32.so
libsoil64.so
OpenGL_RGB.png
OpenGL_RGBA.png
soil.bi
soil32.dll
soil64.dll
test01.bas
test02.bas
  • *.so は Linux で使うファイル。
  • *.dll は Windows で使うファイル。動的リンクライブラリ。
  • soil.bi は、FreeBASICのソースからインポートするヘッダファイル。
  • *.bas は、FreeBASIC のソースファイル。今回のサンプルファイル。

コンパイルする :

fbc を使ってコンパイル。
fbc test01.bas
fbc test02.bas

test01.exe と test02.exe が生成された。

実行してみる :

test01.exe と test02.exe を実行してみる。

test01.exe の結果。

test01_ss.png


test02.exe の結果。

test02_ss.png


どちらも画像ファイルを表示できている。test01 のほうは不透明画像(RGB画像)、test02 のほうは半透明画像(RGBA画像)を描画している模様。

ソースを見てみる :

test01.bas を眺めてみる。

#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "soil.bi"

' test of RGB texture

ChDir ExePath()

ScreenRes 640,480,32,,2

var texture = SOIL_load_OGL_texture("OpenGL_RGB.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO)

dim as integer w,h
screeninfo w,h
glViewport 0,0,w,h
glMatrixMode GL_PROJECTION
glLoadIdentity
gluPerspective 45.0, w/h, 0.1, 100.0
glMatrixMode GL_MODELVIEW
glLoadIdentity

glClearColor 1,0,0,1
glShadeModel GL_SMOOTH

glDisable GL_DEPTH_TEST
glDepthFunc GL_LEQUAL
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST

glEnable GL_TEXTURE_2D
glBindTexture GL_TEXTURE_2D, texture

do
    glClear GL_COLOR_BUFFER_BIT
    
    glBegin GL_QUADS
    glTexCoord2f 0,0:glVertex3f -.5, .25,-5
    glTexCoord2f 1,0:glVertex3f  .5, .25,-5
    glTexCoord2f 1,1:glVertex3f  .5,-.25,-5
    glTexCoord2f 0,1:glVertex3f -.5,-.25,-5
    glEnd
    
    flip
loop while inkey=""

最初のほうで、OpenGL関係のヘッダファイル(GL/gl.bi, GL/glu.bi)と、soil のヘッダファイル(soil.bi)を読み込んでいる。

テクスチャ画像ファイルの読み込みは、SOIL_load_OGL_texture() で行うようだなと…。たった1行で、画像ファイルの読み込み、OpenGLのテクスチャ用データへの変換、OpenGLのテクスチャ確保を行ってくれている模様。

その後は、screeninfo() でウインドウの横幅と縦幅を取得してから、OpenGL関係のいつもの長々とした初期化処理をして、ループ内で四角形を描画しつつテクスチャを画面に出している。ループの最後に flip を呼ぶことで、FreeBASIC は OpenGLのダブルバッファ切り替えをしてくれる。

テクスチャ画像の読み込み、変換、確保を、たった1行で済ませてくれるのはありがたいなと…。

以上、1 日分です。

過去ログ表示

Prev - 2024/02 - 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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project