まぐらぼ

日々の雑記を書いています。

最近の20代プログラマーは「プロパティシートネイティブ」

最近の20代プログラマーは「プロパティシートネイティブ」だけど、VS2008までは別方式だったのです。
Visual Studio 2010 C++ の “VC++ ディレクトリ” 設定はどこへ? | re-Think things

場所はここね。 xxxはユーザー名。
C:\Users\xxx\Local Settings\Application Data\Microsoft\MSBuild\v4.0

VS2010とVS2013以降で環境変数の名称が一部変更になっているけど、同じファイルを参照するため注意が必要です。場合分けが必要ということ。

あと、VS2010は色々と不具合があるので使わないほうが良いです。
昔のサンプルをビルドするときは、VS2010SP1を入れると次の問題が発生します。

Visual Studio 2010 Service Pack 1 特定環境で起こる問題
https://msdn.microsoft.com/ja-jp/subscriptions/gg712382.aspx

UnityでAndroidStudio向けプロジェクトを出力する

f:id:o-maguro:20160401020748j:plain
Android Build前の設定

1. Google Android Project
AndroidStudioでimportできるプロジェクトを出力します。プラグイン作成のときは便利です。

2. Graphics API
デフォルトはautoなので気づき難いですが、チェックをはずすとOpenGLES2/3の選択が出来ます。

3. Write Access
External(SDCard)を選択しないとファイルアクセス失敗します。Google Android Project出力で、
Manifest.xmlが出力されますが、ここにPermission書いてもダメです。

GIMPでRGB565のC言語配列データを作る

RGB565フォーマットを作るのに手間取ったり、PCにRAW出力環境なかったりして手間取るのでメモ。

www.swingingblue.net

10年以上前に自作ツール作ったけど、あのソースどこいったんだろう。
MFC使った記憶があるなぁ。。
download
↑ここにおいとく。

AndroidStudioでJNI

Android JNI はAndroidNDKネイティブプログラミングを見る。ISBN 9784798036304
サンプルはGITHUB https://github.com/demuyan/NDKBook_2nd/tree/master/ch02/JniApp/jni

[JNI sample code]
1.JavaからC++/ネイティブ
2.C++/ネイティブからJava


onedrive.live.com

AndroidNDKを使うときはNDKサンプルをコピペするのが楽。


[環境]
Windows7
AndroidStudio 1.5.1

追記
Unity公式のここに「ネイティブコードから Java プラグインを使用する」言及あり。次の関数を記述すると自動でコールされて初期化されるっぽい。
jni_envはグローバル変数とかにコピーすれば良いみたい(やってみた動いた)

jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* jni_env = 0;
vm->AttachCurrentThread(&jni_env, 0);
return JNI_VERSION_1_6;
}

Unityイベント関数通知のCamera/GameObjectによる差異

c#スクリプトをカメラに付加した場合と、GameObjectに付加した場合で回ってくるイベント関数が異なるので注意が必要。
イベント関数の実行順序 

1. カメラの場合

void OnPreCull()
void OnPreRender()
void OnPostRender()
void OnRenderObject()
void OnGUI()

2. ゲームオブジェクトの場合

OnWillRenderObject()
OnRenderObject()
OnGUI()

イベント関数の仕様的な意味合いから、通常状態では処理がこない関数もある。OnBecameVisible等はGameObjectを動かしてカメラのビューボリュームのin/out時に処理が来るはず。


f:id:o-maguro:20160409181906j:plain

備考:
/*
OnPreCull: カメラがシーンを間引く前に呼び出されます。カリングにより、カメラにどのオブジェクトを表示するかが決定されます。OnPreCull は、カリングが発生する直前に呼び出されます。
OnBecameVisible/OnBecameInvisible: オブジェクトがカメラに対して表示または非表示になる際に呼び出されます。
OnWillRenderObject: オブジェクトが表示されると、各カメラに対して 一度 呼び出されます。
OnPreRender: カメラがシーンのレンダリングを開始する前に呼び出されます。
OnRenderObject: すべてのシーンレンダリング終了後に呼び出されます。GL クラスまたは Graphics.DrawMeshNow を使用して、この点にカスタムのジオメトリを描画できます。
OnPostRender: カメラがシーンのレンダリングを終了した後に呼び出されます。
OnRenderImage: 画面レンダリングが完了し、画面の処理が可能になった後に呼び出されます。イメージエフェクト を参照してください。
OnGUI: GUI イベントに応じて、フレームごとに複数回呼び出されます。
レイアウトおよび再描画イベントが最初に処理され、
その後にレイアウトおよびキーボード/マウスイベントが各入力イベントに対して処理されます。
OnDrawGizmos 可視化のためにシーンビュー内での Gizmos の描画に使用されます。
*/

asyncのローンチポリシー

double square(int i ) {
return i*i; // .. (い)
}
void main5()
{
//ローンチポリシー
//syncはブロック型 実行順序 あ→う→い
//asyncは非ブロック型 実行順序 あ→い→う(あ->いは保証はされていないけどまぁ)
//default(any) 実行順序 あ→い→う

auto fd = async(launch::any, square, 2);
std::this_thread::sleep_for(std::chrono::seconds(1)); // ..(あ)
double d = fd.get(); // (う)
}

この文字は、エンコーディング MS932 にマップできません。

GOOGLEツール開発担当者ってWindowsで動作確認してないよね?英語圏の人間がともかくローカライズ責任者とか仕事してなさすぎだろ。

build.gradle
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}