2016年7月8日金曜日

C#クロージャのUnity3Dにおけるコストについて

前回に引き続きクロージャです.

クロージャを実現するために, コンパイラは裏側でクラスを作成します.
もしスマートフォン向けのアプリケーションを開発しているのならば,
これだけでも高いコストを支払っています.

かなり強引な例ですが, 以下のようなコードの場合を考えます.
Destroyボタンを押してから, Unloadボタンを押してもテクスチャは解放されません.
Clearボタンを押してから, Unloadボタンを押すことで解放されます.
クラスはどこかから参照されているかぎり, ガーベージコレクタによって削除されません.
明らかにLoaderの実装に欠点がありますが,
texture変数は, コード上ではスコープから外れて参照が切れているように見えてしまっている、
ことも問題です.

C#クロージャのコストについて

プログラマ向けのテーマではないです. プログラムも行うデザイナ向けです.
もちろん, ちょっとしたツールを作るときはあなたの自由にプログラミングを楽しむべきです.

Visual Studio 2013 .Net Framework 4.5でコンパイルしました.
実験にはILSPYを使用しました.

URIは失念しましたが, このような実験を行った先人はいます.
疑問を持ったら, せっかく便利なツールがあるのですから, まず自分でやってみるべきです.

2016年6月18日土曜日

GameObjectをキャッシュして使い回すScrollRect

Unity3DのScrollRect.
DynamicScrollRectから見れば, GameObjectがキャッシュされているかは知らなくてよいこと.

2016年5月7日土曜日

_mm_load1_ps(_mm_load_ps1), _mm_set1_ps(_mm_set_ps1)

_mm_load1_ps(_mm_load_ps1)と, _mm_set1_ps(_mm_set_ps1)
どちらも, movssとshufpsになる.
最初から参照のものは_mm_load1_ps,
定数や参照でないものは_mm_set1_ps,
という使い分けでいいと思われる.

_mm_load1_psの存在意味がわからないな.
他のロード系命令との対応と, _mm_set1_ps(*x)と書かなくてもよいぐらい?

ポインタのエイリアスを意識したプログラムを書いてないので,
ここだけ頑張っても, という気もする

2016年4月10日日曜日

Unity3DのTime.time

float endTime = Time.time + duration;
while(Time.time<endTime);
というコードをよく見るので調べてみた.
もちろん私はこのようなコードは書かない.

2016年3月11日金曜日

ACES Filmic Tone Mapping Curve の近似の近似

ACES Filmic Tone Mapping Curve(Krzysztof Narkowicz)
float3 ACESFilm(float3 x)
{
    float a = 2.51f;
    float b = 0.03f;
    float c = 2.43f;
    float d = 0.59f;
    float e = 0.14f;
    return saturate((x*(a*x+b))/(x*(c*x+d)+e));
}
の近似. 定義域を[0 2]に狭める.
//domain x: [0 2]
float3 ACESFilmApprox(float3 x)
{
    return -0.053173 + x*(2.170622 + x*(-2.132296 + x*(0.996822 + x*-0.176583)));
}

2016年3月10日木曜日

Ray Tracing in One Weekend

Ray Tracing in One Weekend,
Ray Tracing: the Next Week,
がKindle向けに出ている.

Realistic Ray Tracing の共著者の一人,
Peter Shirley さんの本であってるかな?