サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
ktaobo.blogspot.com
2014年2月11日火曜日 gccのみでOS自作入門 時刻: 9:48 OSを作りたくて「OS自作入門」本を以前試してたんだけど、WindowsじゃなくてMacでやろうとしたところ、3章のC言語を導入するところで躓いてしまい、放置していた。 これはMacで使われているgccでコンパイルしたオブジェクトファイルからバイナリを取り出す方法がわからなかったのが原因だった。 それならと、Linux系OS上のgccならばリンカスクリプトも受け付けて直のバイナリを取り出すことができるのでやってみた。アセンブラもgccのもの(gas)を使うようにした。 VirtualBoxでLinux系OSを動かす 普段Macを使っていて手元にLinux系のマシンを持ってないんだけど、OS開発にエミュレータを使うこともあり、ついでにとエミュレータ上でLinux系OSを走らせて、その上で自作OSの開発を行うことにし
2013年9月9日月曜日 iOSでCocos2dxを使ったアプリへのAdmobの組み込み 時刻: 11:37 iOSへのAdmobの組み込みは、Google AdMob Ads iOS(初級) - Google Mobile Ads SDK — Google Developersのように、UIViewControllerに組み込んでやればいいのだけど、Cocos2dxを使ったアプリへの組み込みにちょっと手間取った。 iOSでCocos2dx(2.1.5)を使ったアプリに組み込もうと思い、自動生成されるソースのプロジェクトのiosディレクトリ内にRootViewController.hとmmという、UIViewControllerを継承したクラスがあるので、そこに追加すればいいんだろと思いやってみたが表示されない。そもそもviewDidLoad()が呼び出されていない。supportedI
2013年10月5日土曜日 TexturePackerを自作した 時刻: 22:12 OpenGLなどでスプライトの描画をするとき、絵のパターンごとにテクスチャが分かれていると、スプライト1つ1つに対してテクスチャをセットして四角形を描画、次のテクスチャをセットして四角形を描画、というのを繰り返すことになる。しかしそのようなステート変更が増えると非常に負荷がかかる。そこでスプライトシートという方法を使う。 What is a sprite sheet? - The Movie - Performance あらかじめ複数の画像を組み合わせて1つの大きなテクスチャにまとめてしまう。そうすると実行時にはそのテクスチャを1度セットして、あとは複数のスプライトの四角形をまとめて描画することができるので、負荷を減らすことができる。 問題はそのテクスチャをまとめるツールをどうするかという点。Tex
2013年9月18日水曜日 cocos2dxでmrubyを使えるようにして、スマホのゲームをrubyで作る 時刻: 21:36 Ruby好きってのはいるもので、RubyでiOSのアプリを書けるRubyMotionやMobiRubyというものがあるらしい。 RubyMotionはすげーことに、LLVMを使っているのでRubyのコードがネイティブで動くバイナリにコンパイルされるらしい。ただし約$200(20,482円)かかる。30日間は返金可能らしいが、試してない。 MobiRubyはmrubyを組み込んでいるとのこと。オープンソースとのことでgithubから落としてGetting startedの通りrakeしたものの失敗する。あれ これやってみたけど動かないので断念。 ちょっと試したいだけなのでお金も出せないし、環境設定とか難しくてわからないし…ということで、自分でmrubyを組み込
2013年4月18日木曜日 mrubyのGCの仕組みを調べた 時刻: 0:09 動機 LuaのAPIは、Lua内部で扱われる値に関してスタック上であれこれ操作出来るだけで、値自体を直接取得したり作成することはできない。値を取り出したいときはスタック上のある場所にある値の型を調べて、その型の値を取り出すAPIを呼び出す、という具合になっている。この場合、処理系で扱う値はすべて処理系側で管理されているので、ガベージコレクト(GC)できるのもわからんでもない。 しかしmrubyのAPIではスクリプト内部で扱う値をmrb_valueとしてC言語側に直接取り出せる。この場合処理系の管理を逃れてしまうことはないのか。またCの関数でmrubyのオブジェクトを作成した瞬間にGCが走った場合に、まだmrubyで管理している変数からの参照がなくて、解放されてしまったりしないのか。 大昔の事しか知らないけど
C++側で定義されているクラスをmrubyに持ち込む方法を調べた。参考にしたのはmruby-time/time.cやmruby/C構造体組み込みを読む - Code Reading Wiki。正しいかどうかは保証できないけれど、一応ちゃんと動いているようです。 C++側になにかクラス class Hoge { public: Hoge(int x) : x_(x) { std::cout << "Hoge::ctor()" << std::endl; } virtual ~Hoge() { std::cout << "Hoge::dtor()" << std::endl; } int x() const { return x_; } private: int x_; }; があったとして、これをmruby側から扱いたい場合には、DATA型を使うといいようだ: #include <mruby
mrubyに任意の型のC言語の関数を登録するためのバインダを作りました。 mrubybind - Binding library for mruby/C++ 使い方は簡単で、mrubybind.hをインクルードしてMrubyBindというクラスのインスタンスを生成する。そして、あるC言語の関数foobarがあったとき、 #include "mrubybind.h" void init(mrb_state* mrb) { mrubybind::MrubyBind b(mrb); b.bind("foobar", foobar); } とすれば、mrubyからその登録した名前で呼び出すことができる。mruby側から渡した引数が自動的にCの関数に渡り、その関数からの戻り値がmruby側に戻る。関数をバインドした後はMrubyBindのオブジェクトは捨ててしまってokです。 以下は実装の説明。 m
2013年3月12日火曜日 mrubyでカスタムアロケータを指定 時刻: 17:10 mrubyで標準のmalloc/freeじゃなく、アプリ側で用意したメモリアロケータを指定してみる。mrubyの初期化をmrb_open()じゃなくてmrb_open_allocf()にして、引数にアロケータの関数とその関数に渡すユーザデータを与えて呼び出すことで、アプリ側でメモリ管理ができる。 アロケータは typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); という型の関数で、サイズが0なら解放、0より大きい場合ポインタがNULLなら新規確保、NULLじゃなければ以前確保していた領域をリサイズした結果のポインタを返すことで、アプリ側で任意のメモリ管理ができる。デフォルトだと以下の様なアロケータになっ
2013年3月11日月曜日 mrubyのAPIテスト 時刻: 21:51 mrubyをCのプログラムに組み込んで使う方法を調べる。今のところ公式のドキュメントはHello Worldくらいしか用意されてない? 文字列を直接実行 #include <mruby .h> int main() { mrb_state* mrb = mrb_open(); mrb_load_string(mrb, "puts 'hello world'"); mrb_close(mrb); return 0; } // 実行結果: // hello world mrb_open()でコンテキスト作成、mrb_close()で終了 mrb_load_string()で実行 確認用として使う分にはよいだろうが、コンパイルが入るので何度も実行するには向かないでしょう。 C言語からmrubyの関数を呼び出す #incl
このページを最初にブックマークしてみませんか?
『ktaobo.blogspot.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く