在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

输出是这样的。三角形旋转着。

Screenshot from 2014-04-14 18:50:18.png
广告
将在 10 秒后关闭
bannerAds