UbuntuでD言語からSDLとOpenGLを組み合わせて使ってみた。

方法はほとんど変わっていません。
ほぼメモのような感じなので、D言語SDLOpenGLを使う関係の記事はまとめたほうがよかったかもしれません。
ですが書き直すのが面倒なので書いてしまいます。

前回と前々回の作業を行った後に行ったので、それを前提に書いています。
ライブラリのインストールやD言語用ライブラリの準備は前回や前々回を読んでください。

ライブラリのフォルダをコピー

今回の作業用ディレクトリの中に、前回、前々回の作業用ディレクトリの中にあるSDLディレクトリ、openglディレクトリをコピーしました。

コードを書いて使ってみる

ウィンドウタイトルを設定するSDL_WM_SetCaptionはC言語の関数なので、D言語のstringやnullがそのまま使えず苦労しました。
ウィンドウタイトルの英語には自信がないので、間違っているかもしれません。

import SDL;
import opengl;
import std.stdio;
import std.string;

void draw()
{
  glClear (GL_COLOR_BUFFER_BIT);
  glBegin (GL_LINE_LOOP);
  glVertex2d (-0.9, -0.9);
  glVertex2d (0.9, -0.9);
  glVertex2d (0, 0.9);
  glEnd ();
  SDL_GL_SwapBuffers();
}

void main()
{
  if (SDL_Init(SDL_INIT_VIDEO) < 0) {
    writefln("SDL初期化エラー");
    return;
  }
  SDL_WM_SetCaption(cast(char*)toStringz("Using SDL and OpenGL with D"), cast(char*)0);
  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  SDL_Surface *screen = SDL_SetVideoMode(320, 240, 32, SDL_OPENGL);
  if (screen == null) {
    writefln("画面初期化エラー");
    return;
  }
  glClearColor(0.0, 0.0, 255.0, 0.0);
  int done = 0;
  SDL_Event e;
  while (!done) {
    while (SDL_PollEvent(&e)) {
      done = e.type == SDL_QUIT;
    }
    draw();
    SDL_Delay(1000/30);
  }
  SDL_Quit();
}

コンパイルには、「dmd sdlgl.d -ISDL -Iopengl -L-lSDL -L-lGL」というコマンドを使いました。
コンパイルすると「sdlgl」という実行ファイルができます。
実行すると、青い背景に白い線で三角形が描画されます。