mieki256's diary



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

#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行で済ませてくれるのはありがたいなと…。

以上です。

過去ログ表示

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