BREW

ミリ秒単位で現在時刻を取得する関数

BREW にはいくつかの時間を取得するための関数があります。 GETTIMESECONDS() は 1980年1月6日00:00:00 からの秒数を返します。 GETTIMEMS() は 00:00:00 からの時間を取得します。 この2つの関数を組み合わせれば、1980年1月6日00:00:00からの経過時間をミ…

固定小数点数クラスのデバッグ

以前作った固定小数点数クラスですが、これを使ったプログラムを VisualStudio のデバッグ実行で値を見ようとすると、以下のように表示されます。 この数字は内部の変数が保持している数字なのですが、これは 65536 倍された値なので表現している値は 65536 …

2次元アフィン変換の高速転送(3)

2次元アフィン変換の高速転送(1) 2次元アフィン変換の高速転送(2) 穴あきの問題は解決したので、次は速度が遅いという問題について考えてみます。 前回のプログラム 前回のコードは // 逆行列を求める matrix inv(mat); inv.invert(); for (int y = lt.y; y …

2次元アフィン変換の高速転送(2)

2次元アフィン変換の高速転送(1) 前回でアフィン変換を行うための行列クラスを作ったので、今回は実際に転送を行ってみようと思います。 オレオレ用語 転送元と転送先と書くと、パッと見分かりづらいので、それぞれ src, dst と書くことにします。 とりあえ…

2次元アフィン変換の高速転送(1)

最近、BREW でアフィン変換を掛けながら転送する処理を書きました。 2,3回ぐらいに分けてそれを書いていきたいと思います。 固定小数点数 基本的に計算は全部固定小数で行っています。固定小数点数クラス fixed は以前書きました。 固定小数点数クラス - mel…

Boost.Coroutine を組み込み環境向けに移植してみた

ある程度動いてる感じがするので公開してみます。 BREW で人柱になってくれる方を募集中です。 ソースとか いつもの場所に置いときました。 http://melpon.tank.jp/pukiwiki147/index.php?cmd=read&page=Memo%2F%CA%AA%C3%D6%2Fmoost 移植にあたって Boost.C…

Boost.Optional を組み込み環境向けに移植してみた

アライメント系があまり理解できず、Boost.PP のマクロを展開して貼り付けるだけになってしまいました。 ただまあ、optional クラスはできる限り無駄な処理が出ないように実装したつもりです。 以下のページに置いておきました。 http://melpon.tank.jp/puki…

Boost.Coroutine 移植中

とりあえず boost::coroutines::coroutine は一通り移植できて、こんな感じに使えるようになってきました。 int fib(coroutine<int ()>::self& self) { // 初項 int n = 0; self.yield(n); // 2項 int m = 1; self.yield(m); // 3項以降 while (true) { int v = m + </int>…

RTTI を使わずに Boost.Any を実装する方法

Boost.Any は any_cast<> 内で type_info を使って変換しようとしている型が一致しているかどうかを判断してるんだけど、RTTI を使いたくないので type_info を使わずに any を実装してみる。 これは要するに型単位でユニークな値が取れればいいだけなので、…

Boost.Function とか Boost.Bind を組み込み環境向けに移植してみた

といっても BREW で使えるようにしただけなので他の環境で使えるかどうかは知りません。 あとバイナリサイズがどうなっても知りません(といっても自分で関数オブジェクト作って格納して呼び出した場合のコードサイズと大して変わらない気もしますが)。 以…

Visual Studio から実機用のバイナリを作る方法

実機用のバイナリを作る方法についてはstd::vector と例外と+αを使ってる状態で実機用のバイナリを作る方法を参考にして貰うとして、ここでは Visual Studio でどうやって実機用バイナリを作るかというのを説明します。 といっても単純にカスタムビルドを使…

std::vector と例外と+αを使ってる状態で実機用のバイナリを作る方法

とりあえず実機でも一通り動くような感じになってきたので、RVCT3.0 で実機用のバイナリを作る方法をまとめてみようと思います。 事前知識 ずっと勘違いしていたのですが、BREW ではもはやグローバル変数は使えます。 elf2mod というツールが Qualcomm から…

RVCT3.0 のエラー形式

RVCT3.0 の ARM コンパイラは、ちゃんとコンパイラオプションを指定することで日本語エラーを出力してくれます。英語を直訳したような日本語な感じもするけど、それでも自分にはとっても便利。 以下のフラグを設定すると日本語になります。 --message_locale…

std::vector と例外を使ってる状態でコンパイルを通す方法

まだ実機で動かせないので、とりあえずコンパイルを通すだけ。 まず当然のごとく new と delete は再定義するべき。 void* operator new(std::size_t size) throw(std::bad_alloc) { return MALLOC(size); } void* operator new[](std::size_t size) throw(s…

衝撃の事実

ARM Information Center Table C.2 shows the major features of the language supported by this release of RealView Compilation Tools for BREW C++. Major feature ISO/IEC standard section Support Core language 1 to 13 Yes Templates 14 Templates…

--fpu none が倒せない

を include すると芋づる式に が include されて、そいつが fpu none だとコンパイルエラーになるという罠。 まあ最終的に浮動小数点使ってなければリンク時に解決するんだろうけど……なんかやだなぁ。

RVCT for BREW 3.0 キター!

そしてコンパイルエラー山盛りキター! 出たエラー・ワウォーニングとか。 Warning: 初期化リストが定義の順番じゃない 順番どおりに並べた std::bad_alloc が見つからない を include std::out_of_range が見つからない を include 以下のコードは式が左辺…

RVDS3.0 のドキュメント読み中

で、面白い記述発見。 暗黙のインクルード 暗黙のインクルードがイネーブルになっているとき、.h ファイルで宣言されたテンプレートエンティティのインスタンス生成のために定義が必要な場合は、コンパイラは対応する .cc ファイルを暗黙にインクルードして…

BREW で bind と function が使いたい

とは思うものの、容量がかなり増えそうなので怖いところ。 bind はまあ、それぞれ用のストレージクラスを作るのと大して変わらない気はするんだけど、function は結構ごちゃごちゃした処理が多いから怖い。 ただ、function は Type Erasure のせいで大きくな…

フォントクラス

昔に作ったライブラリのフォントクラスとあまり違わなかったり。id:melpon:20090324(文字列をテクスチャ化する)で使ってます。 BREW2.x は非対応でつ(多分スモールフォントあたりちょっと弄れば動くけど)。

IShell クラスのラッパー

主に ISHELL_CreateInstance をラップするための存在だったりするのですが。 で、RVCT3.0 は例外が使える(らしい)ので ISHELL_CreateInstance に失敗したら例外を投げてやることにします。 また、BREW API 用の interusive なスマートポインタ(brew_ptr)…

AECHAR の入力

今のライブラリは文字列クラスなんてのは作ってないのだけれども、今のプロジェクトは幸いにして使う文字列が固定なので、事前にテクスチャにして(文字列をテクスチャ化する)おくことで何とかなってる。 でも、やっぱりその固定の文字列を作るために AECHA…

自前のストリームクラスに unzip ストリームを実装する

BREW には IUnzipAStream というのがあるのだけれども、これは IUNZIPASTREAM_SetStream() で IAStream を継承したクラスを渡す必要がある。 しかし、もし何らかの理由(C++ の継承関係を持っている同期的なストリームクラスが欲しい!)で自前のストリーム…

色クラス

色クラスがあると何かと便利なので作ってみた。 struct color { byte b; byte g; byte r; byte a; color() : b(0), g(0), r(0), a(0) { } color(byte r_, byte g_, byte b_, byte a_) : r(r_), g(g_), b(b_), a(a_) { } color(uint32 v) { // リトルエンディ…

文字列をテクスチャ化する

OpenGL ES は文字列が扱えないので、文字列をテクスチャ化するためのクラスを作ってみた。 class string_texture { context_ptr context_; brew_ptr<IDisplay> display_; brew_ptr<IDIB> dib_; // 文字描画用のテンポラリ public: string_texture(const context_ptr& c, IDis</idib></idisplay>…

OpenGL ES のパレットテクスチャを作る

glGenTextures でテクスチャの番号をもらって、glBindTexture でアクティブにして、適当にパラメータを設定して、glCompressedTexImage2D で作るだけ。 GLint texture; GLenum format; int width; int height; void* buf; int bufsize; glGenTextures(1, &te…

2進桁数計算の便利さ

昔、わんくまブログで書いた [C++]二進桁数高速計算 [C++]二進桁数高速計算(2) この2進桁数を高速に求める関数 int binaryDigit(unsigned int val) { int digit = 0; digit += (((val >> 16) + 0xFFFF) & 0x10000) >> 12; digit += (((val >> digit) + 0xFF0…

固定小数点数クラス

OpenGL ES を使う上ですごく必要になってきたので作ってみた。 // 固定小数点数クラス(Q16) struct fixed { private: int32 v_; public: fixed() : v_(0) { } fixed(const fixed& f) : v_(f.v_) { } // implicit で大丈夫だよね?オーバーフローしないように…

BREW API と intrusive_ptr の親和性

は最悪だと思うのです。 C での擬似的な継承関係は C++ の継承関係とは関係が無いので、型の変換が一切できないのです。 intrusive_ptr<IShell> shell; intrusive_ptr<IBase> base; shell = base; // 当然エラー base = shell; // エラー base = static_pointer_cast<IBase>(shell)</ibase></ibase></ishell>…

BREW の高速転送

昔、RGB565 から RGB565 へ高速に転送するルーチンを書きました。 ふと思い出したので貼り付けておきます。