在Debian上安装GLFW3和Derelict3
因为被迫学习OpenGL,但既然如此,我决定用我正在学习的D语言来尝试一下。由于Debian上没有Derelict3和GLFW3的软件包,所以我要手动安装它们。
追记(4/20): 看起来安装了libglfw3。
https://packages.debian.org/unstable/main/libglfw3
安装GLFW3
将 CMakeLists.txt 中的 BUILD_SHARED_LIBS 设置为 ON。
如果 BUILD_SHARED_LIBS 设为 OFF,只会生成静态库,但 Derelict 会尝试动态链接 libglfw3.so,在运行时会出错。
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 743e72d..1c4498c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,7 +10,7 @@ set(GLFW_VERSION "${GLFW_VERSION_MAJOR}.${GLFW_VERSION_MINOR}")
set(GLFW_VERSION_FULL "${GLFW_VERSION}.${GLFW_VERSION_PATCH}${GLFW_VERSION_EXTRA}")
set(LIB_SUFFIX "" CACHE STRING "Takes an empty string or 64. Directory where lib will be installed: lib or lib64")
-option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)
option(GLFW_BUILD_TESTS "Build the GLFW test programs" ON)
option(GLFW_BUILD_DOCS "Build the GLFW documentation" ON)
建筑
$ git clone https://github.com/glfw/glfw.git
$ cd glfw
$ cmake .
$ make
$ sudo make install
我在使用CMake时被告知没有RandR,所以我执行了以下命令进行安装:
$ sudo aptitude install libxrandr-dev。
废弃的Derelict3建筑
由于Debian没有dmd软件包,所以需要使用ldc(ldmd2)进行构建。
$ git clone https://github.com/aldacron/Derelict3.git
$ cd Derelict3/build
$ ldmd2 build.d
$ ./build Util GL3 GLFW3
这个包将分别在Derelict3/import和Derelict3/lib/ldc中创建。
由于README中没有特别提到如何将其安装到特定目录,因此我决定在Makefile中直接指定上述目录。
写一个测试代码。
请参考这里:http://www.glfw.org/docs/3.0/quick.html
这次省略了错误处理等内容。
import derelict.opengl3.gl;
import derelict.opengl3.gl3;
import derelict.glfw3.glfw3;
import std.stdio;
void main() {
DerelictGL.load();
DerelictGLFW3.load();
glfwInit();
auto window = glfwCreateWindow(800, 600, "Hello, GLFW3!", null, null);
glfwMakeContextCurrent(window);
while(!glfwWindowShouldClose(window)){
int width, height;
glfwGetFramebufferSize(window, &width, &height);
immutable ratio = width / cast(float) height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1., 1., 1., -1.);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(cast(float) glfwGetTime() * 50., 0., 0., 1.);
glBegin(GL_TRIANGLES);
glColor3f(1., 0., 0.);
glVertex3f(-0.6, -0.4, 0.);
glColor3f(0., 1., 0.);
glVertex3f(0.6, -0.4, 0.);
glColor3f(0., 0., 1.);
glVertex3f(0., 0.6, 0.);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
}
如果在代码中写了`pragma(lib, “DerelictGL3”);`,本来是不需要像`-L-lDerelictGL3`这样的写法的。但由于出现了链接错误,所以还是要写上。
P:=openwindow
DC:=ldmd2
SRCS:=openwindow.d
INCLUDES:=$(HOME)/work/Derelict3/import/
LIBS:=-L-L$(HOME)/work/Derelict3/lib/ldc/ -L-lDerelictGL3 -L-lDerelictGLFW3 -L-lDerelictUtil
$(P): $(SRCS)
$(DC) -of$(P) -I$(INCLUDES) $(LIBS) $(SRCS)
clean:
-rm -f openwindow.o openwindow
.PHONY: clean
输出是这样的。三角形旋转着。