このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Mac Home brewでSDL2.0を簡単に環境設定

C

2020.06.24

この記事は最終更新日から1年以上が経過しています。

どもです。

そろそろ、Ubuntuで、SDL2.0開発でも始めようかと思いきや(この時代にですがw)、

そもそもMacでも開発出来るではないか!

完全に思い込んでいました。

しかも、Home Brewでサクッとインストール出来るではないか!?

となれば、Macでサクッと環境設定し、開発でもと。

とはいえ、先日のWWDC 2020では、ARM Macに移行するって言うもんだから、色々とどうなるんだろう感が半端ない今日この頃です。

まぁ、BootCampは無くなるだろうし、構想していたMacMini + eGPU構成も夢のまま終わりそうです。

(今買うのも微妙だし、ARMになると、eGPU無くなりそうだし)

と言う、モヤモヤは一旦置いといて、

バージョン

  • Mac OS 10.14.5
  • Homebrew 2.4.1
  • Apple clang version 11.0.0

環境構築

Home Brewでサクッと、SDL2.0をインストールする場合は、以下のコマンドで。

$ brew install sdl2

諸々のライブラリをインストールする場合は以下のコマンドでインストール。

$ brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer sdl2_gfx sdl2_net

各ライブラリの概要は以下の通り

  • sdl2_image 画像を扱うライブラリ
  • sdl2_ttf フォントを扱うライブラリ
  • sdl2_mixer サウンドミキシングライブラリ
  • sdl2_gfx 線分、四角、円、多角形の描画等を持つグラフィックライブラリ
  • sdl2_net ネットワークライブラリ

こちらのSDLのwikiでは、ビルドするやり方ですが、brewでサクッとインストールしちゃいました。

コンパイルを行う際のコマンドは以下となります。

$ gcc main.c `sdl2-config --cflags --libs` 

それでは、早速、ウィンドウを立ち上げるソースを作ります。

#include "SDL.h"
#include <stdio.h>

int main() {
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window *window = SDL_CreateWindow(
        "SDL2 window title",
        SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,
        640,
        480,
        SDL_WINDOW_OPENGL
    );

    if (window == NULL) {
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }

    SDL_Event event;
    while(SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT) {
            SDL_DestroyWindow(window);
            SDL_Quit();
            return 0;
        }
    }

    SDL_Delay(5000);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

上記のソースを以下のコマンドで、コンパイル

$ gcc main.c `sdl2-config --cflags --libs`

main.outのファイルが生成されているかと思いますので、実行します。

$ ./main

すると、ウィンドウが立ちがりました!

ソース概要

ざっとだけ解説を。

SDL_CreateWindowで、ウィンドウを生成しております。

SDL_Window *window = SDL_CreateWindow(
    "SDL2 window title", // ウィンドウのタイトル
    SDL_WINDOWPOS_UNDEFINED, // ウィンドウのX座標の初期値
    SDL_WINDOWPOS_UNDEFINED, // ウィンドウのY座標の初期値
    640, // ウィンドウの幅
    480, // ウィンドウの高さ
    SDL_WINDOW_OPENGL // 0 または 1のフラグ
);

ちょっとハマったのが、問題なく実行されているが、ウィンドウが表示しない現象に陥った事。 

どうやら、以下のループが無いと、ウィンドウが表示しないみたいなので、追記しました。

SDL_Event event;
while(SDL_PollEvent(&event)) {
    if (event.type == SDL_QUIT) {
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 0;
    }
}

C++のファイルでも、以下の g++ コマンドでコンパイル出来ました。

$ g++ main.cpp `sdl2-config --cflags --libs`

生成する、オブジェクトファイル名を変更したい場合じゃ以下のように。

g++ -o window main.cpp `sdl2-config --cflags --libs`

以下のコマンドで、行なっているコマンドの詳細を確認できます。

$ sdl2-config --cflags --libs
-I/usr/local/include/SDL2 -D_THREAD_SAFE
-L/usr/local/lib -lSDL2

といった訳で、今回は最小限でSDL2.0で、ウィンドウを立ち上げました。

ちょっとしたグラフィック作成に良いですね。

ではではぁ。

Comment

Related Article

Mac(gcc)で、C言語関数 getch関数を使う。

2020.12.05

Mac Home brewでSDL2.0を簡単に環境設定

2020.06.24

C言語 配列

2016.07.04

C言語 繰り返し文

2016.07.03

C言語 if文・switch文・論理演算子

2016.07.02

C言語の基礎・基本

2016.07.01

Macでの C・C++言語 のエディタ・IDE選び

2016.07.01

CATEGORY LIST

LATEST NEWS

【M1 Mac】Python ScrapyがImportErrorで大ハマリ。lxmlなど環境作成し対応した件。

Python

2023.05.24

ミニPC Minisforum UM773 SE/ Liteがセールみたいだったので、ポチった件

イベント

2023.04.23

AI(ChatGPT)に聞くDart言語

Dart

2023.03.12

DartパッケージでPub Pointsを満点にする

Dart

2023.03.11

Dartパッケージをサクッと作成する

Dart

2023.03.07

DartでさくっとCLIツール作成。

Dart

2023.02.28

M1Macで行う「RUSTではじめるOpenGL」

Rust

2023.02.25

SolidityとEthereumによる実践スマートコントラクト開発 書評 ~ 再構築

暗号通貨、ブロックチェーン

2023.02.10

【Unity x WebAssembly】UnityコンテンツをBlazorとFlutterでWebアプリとして扱う

Unity

2023.01.30

【nasne】M1 Mac Miniで、「torne® mobile」使用して、テレビ視聴。

mac

2022.12.31

2022 VIVA JS World Cup 開幕!! 〜 Vue3で作るサッカーゲーム 〜

JavaScript

2022.12.24

M1 Mac ruby rbenv install error

Ruby

2022.10.10

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US