2017年9月8日金曜日

Which SDL1 or SDL2 with emscripten





Emscripten と OpenGLを使ってゲームを作ろうと思いたって、
まずは、SDL2の基本的な使い方を試していた。

しかし、今の所は、SDL 1系 の方が、良いと思いました。
SDL2があるのに、SDL1 を選ぶのはなぜか?


# 2017y 9m7d

SDL と SDL2 が、ちゃんぽんのゲームライブラリーを作ろう

素の OpenGL の APIを直接いじるのは、大変なので、欲しい機能を抽象化してライブラリー化する事にしました。

SDL2をベースに作成しています。ただ、これを、ブラウザー用には「SDL1」、Windows OSX用には「SDL2」を利用する形にしたいと結論しました。

なぜに?


SDLはコンピューターゲーム用のハードに近い部分のライブラリ

SDLは、音やグラフィック、マウスイベント、タッチイベントなどを、扱う事ができるC言語のライブラリです。 
Android、 iOS、 Windows、 Mac、 Browser上で動作します。

このライブラリーを利用して書けば、作成したアプリやゲームが、ありとあらゆるPFで動作するようになります。


Emscriptenを使えば、SDLがブラウザーで動作する

EmscriptenはLLVMでバイトコードを、ブラウザーで動作できるようするライブラリーです。

Clangを利用すれば、LLVM用のバイトコードをC言語で作れますから、
SDL系 x C系 のアプリを ブラウザーで動作させる事ができます。


SDL2は、最新のSDL


SDLの最新版が、SDL2.x 系です。 SDL1.2.x から、大幅に変更されました。
VideoAPI、new Sprite 2dGmae, Touch Event, IMF, Mobile PF対応
などなど、様々な機能を追加されました。



kyorohiro/cgame のブラウザー向け、SDL1 を使う事にした。

kyorohiro/cgameのブラウザー向けは、SDL1を使う事にしました。

SDL2 系だと、現在(2017y 9m7d) 一部使えない機能があったのと、
SDL2系を使った時に生成される Javascriptのサイズが大きかったからです。


以下に作成したものおきます。

画像の表示、オーディオ化の再生、OpenGL、タッチイベント、マウスイベント、
の取得等、SDL1とSDL2で書いたコードです。
Emscripten と、OSXと、Windows(MinGW)で動作します。


a. SDL1系の方が2系よりも軽い

だいたい、SDL2系だと、1.2〜3.4 MBくらいのJavaScripteを出力します。
ただ、SDL1系だと、120kbから300KBくらいです。
めちゃくちゃ軽いです。


b. SDL2系で SDL_mixerが思い通りに動作しない

SDL_mixerの初期化に失敗しました。SDL_Mixierが使えないと
音の再生が面倒です。

c. SDL1系でも、タッチイベントが使える

Emscriptenでは、SDL1系でもFinger Event を取得できます。
スマートフォンのユーザー向けには、タッチイベントをサポートしたいですよね!!


という事で、kyorohiroの選択は、 browser用には、SDL1系、それ以外はSDL2系 で進める事にしました。


おわり!!

.








------

試したコード
https://github.com/kyorohiro/sdl2_doc
This codes can build for windows and mac and html5 on windows and mac

作成中のライブラリー
https://github.com/kyorohiro/cgame

ことはじめ
https://kyorohiro.blogspot.jp/2017/09/which-use-sdl1-or-sdl2-at-emscripten.html


.







0 件のコメント:

コメントを投稿

mbedtls dart の 開発を始めた web wasm ffi io flutter

C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter  でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...