LoginSignup
3
10

More than 3 years have passed since last update.

WindowsとCLionとSDL2でゲーム開発環境を整える

Last updated at Posted at 2019-09-09

SDL2-CLion-Windows

  • WindowsとCLionとSDL2でゲーム開発環境を整える
  • Minimal example of animating OpenGL on SDL2, developed by CLion in Windows

用語

CMakeはコンパイラに依存しないビルド自動化のためのフリーソフトウェアであり、様々なオペレーティングシステムで動作させることができます。

MinGW(Minimalist GNU for Windows)はGCC などの開発環境をWindowsで利用できるようにしてくれるソフトウェア群です。C/C++コンパイラgcc/g++、作業自動化ツールmake等を含みます。

CLionはJetBrains社が開発したC/C++の統合開発環境です、CLionのビルド作業はCMakeで自動化されます。CLionのコンパイルやリンクはMinGWのgcc/g++が使われます(MinGW toolchainを用いた場合)

インストール

Install MinGW-W64

MinGW-W64-install.exeをダウンロードしインストールします。
- 推奨設定
- Architecture:CPUが64bitならx86_64、32bitならi686
- Threads: posix
- Exception: sjlj
- m64とm32の両オプションを使用可能にするために指定する
- sefは32bit,dwarfは64bitでリンクエラーが生じる。
- インストール先はCドライブ直下が良い。
- 例: C:\mingw-w64\bin
- binディレクトリに環境変数PATHを通してください

Install SDL2

SDL2をシステムにインストールすると設定が汚れるのでプロジェクトにインストールします。

SDL2, SDL2_image, SDL2_mixer 等のSDL関係のライブラリをダウンロードします。
開発目的でMinGWと共に利用するのでdevelとmingwがつくtar.gzファイルをダウンロードしてください。
例:SDL2-devel-2.0.10-mingw.tar.gz, SDL2_image-devel-2.0.5-mingw.tar.gz

tar.gz 圧縮ファイルを展開しbin/、include/、lib/をSDL2-Clion-Windows/直下に配置してください。
面倒くさいのでシェルスクリプトを用意してあります。

  1. 直下にSDL2-Clion-Windows/直下にSDL2**.tar.gzファイル達を配置します。
  2. setup.shを実行してください。
    • 64bit環境ならば./setup.sh -x86_64
    • 32bit環境ならば./setup.sh -i686

setup.shは以下のようになっています。
最終行から分かるようにSDL2から始まるtar.gzファイルを検索し、
それぞれtarコマンドで展開しつつbin、lib、includeを直下に配置し他は/dev/nullに捨てています。


#!/bin/bash

PREFIX="x86_64"
while getopts x86_64:i686: OPT
do
 case $OPT in
   "x86_64" ) ;;
   "i686" ) PREFIX="i686" ;;
 esac
done
find -name "SDL2*.tar.gz" | xargs -I{} tar zxvf {} --transform="s,^[^/]+/${PREFIX}[^/]+/(bin|include|lib),\1,x;s,^SDL2,/dev/null/,x" --absolute-names --show-transformed-names

サンプルの実行

Write CMakeLists.txt

mygameはプロジェクト名です適宜変更してください。
target_link_librariesでインストールしたSDL2やopenglをリンクしています。
ここで指定したライブラリはg++コマンドのリンクオプションに-lSDL2 -lSDL2_imageとして与えられ、
gccはinclude_directories(./include)に従いinclude/からそれらのライブラリを検索します。

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin")は先ほど配置した/bin内にexeが出力されることを意味します。
dllを検索できる位置にexeを配置しました。

cmake_minimum_required(VERSION 3.12)
project(mygame)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin")

include_directories(./include)
link_directories(./lib)

file(GLOB sourcefiles "*.h" "*.cpp")
add_executable(${PROJECT_NAME} ${sourcefiles})

find_package(OpenGL)
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} SDL2_image SDL2 SDL2main)

Write main.cpp

以下の点に注意してください
1. SDL_MAIN_HANDLED マクロを#include の前に定義すること
2. #include のようにSDL2/を頭につけること

CMSDL_MAIN_HANDLED マクロはmain関数のSDL_mainへの置換を無効化します。SDL2/はC:\MinGW\include\SDL2を参照するために必要です。

#define SDL_MAIN_HANDLED
#include <math.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>

static const int width = 480, height = 360, p=1000;

void draw() {
    int t=SDL_GetTicks()%p;
    glClearColor(1, 1, 1, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glColor3f(0.5+0.5*sin(5*M_PI*t/p), 0.5+0.5*sin(7*M_PI*t/p), 0.5+0.5*sin(11*M_PI*t/p));
    glVertex2f(sin(2*M_PI*t/p), 1);
    glVertex2f(-1, -1);
    glVertex2f(1, -1);
    glEnd();
    glFlush();
}

int main(int ArgCount, char **Args) {
    SDL_Window *Window = SDL_CreateWindow("OpenGL Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height,SDL_WINDOW_OPENGL);
    SDL_GLContext Context = SDL_GL_CreateContext(Window);
    for (int Running = 1; Running;) {
        SDL_Event Event;
        while (SDL_PollEvent(&Event)) {
            if (Event.type == SDL_QUIT)Running = 0;
        }
        glViewport(0, 0, width, height);
        draw();
        SDL_GL_SwapWindow(Window);
    }
    return 0;
}

Build and Run

animating-gl

おめでとうございます。

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10