non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

Macでglfwのサンプルを動かしてハマりそうになった事

おはようございます。次男は「ママ」が未だに言えず、何でも「パパ」といいます。@kjunichiです。

 

背景

Rustでシダを描画したくで、gl-rsのサンプルを眺めているが、どうもこれ、OpenGLではなく、OpenGL ESで書かれいる模様。

自分はOpenGLはなんとなくユルフワで理解できるが、OpenGL ESは古くはAndroid、最近では、1世代前のKindle Fire HDでちょっと動かしたくらいで、どうにも分からないことが多い。

また、WebGLをiOS8でも使っていたりするが、これもThree.jsでラップして使っているので、glBufferなんちゃら系が今ひとつ理解出来ていない。

そんな訳で、C言語でフツーにOpenGL ESを書けないものかと探していたら、OpenGL界隈では有名な床井研究室のページでGLSLのエントリーを発見。

XCodeはできるだけ避けてる人生だった

Githubでサンプルが落とせた

git clone https://github.com/tokoik/glfwsample.git

 

アラフォーには、iOSの新しいのが出る度にGUIが変更されてしまうXCodeには正直付いて行きたくないので、クラシカルなMakefileを使って作業を試みた。

atom.ioで開くと、文字化けしていたので、ソースをUTF8に変換した。

MakefileLinux向けにあったので、そのままmakeした。

 

% make

c++ -I/usr/X11R6/include -DX11 -Wall   -c -o gg.o gg.cpp

c++ -I/usr/X11R6/include -DX11 -Wall   -c -o main.o main.cpp

c++ -I/usr/X11R6/include -DX11 -Wall    gg.o main.o  libglfw_linux.a -L/usr/X11R6/lib -lX11 -lGL -lXrandr -lrt -lpthread -lm -o glfwsample

ld: library not found for -lrt

clang: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [glfwsample] Error 1

 

 

となったので、-lrtMakefileから削除したら、今度は、

ld: warning: ignoring file libglfw_linux.a, file was built for archive which is not the architecture being linked (x86_64): libglfw_linux.a

 

というこで、-lglfwを追加して、これでビルド出来た。

VRAMのゴミが表示される感じ

動くが画面がVRMAの領域の一部がぐしゃぐしゃっと表示される。

X11リンクしてるがXquartzが動いてないぞ

aquaで動いているから、X11関連要らなそう、というこで、Makefileを以下のようにOpenGL系はフレームワークを使うように変更

 

CXXFLAGS    =  -Wall

LDLIBS  = -lglfw -lm -framework opengl

OBJECTS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))

TARGET  = glfwsample

 

.PHONY: clean depend

 

$(TARGET): $(OBJECTS)

    $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@

 

clean:

    -$(RM) $(TARGET) *.o *~ .*~ core

 

depend:

    $(CXX) $(CXXFLAGS) -MM *.cpp > $(TARGET).dep

 

-include $(wildcard *.dep)

 

 

動いた。

f:id:kjw_junichi:20180926221639p:plain

 

まとめ

OSXではX11も使えるので、OpenGL系なコードは今後もリンクするライブラリに注意が必要。

-lX11 -lGL

 

は削除して、

-frameowrk OpenGL

関連記事

10年前の記事

1年前の記事

1年後の記事

4年後の記事