私は、UnityとHololensを使用してカメラを使用するアプリケーションをコーディングしています。それは大丈夫です。その後、私は何か(後述)に変更し、私はクラッシュ後に次のエラーを得た:Unity Hololensクラッシュ
d3d11:896、H = 504 d3dfmt = 87 [887a0005]
d3d11 = W 2Dテクスチャをステージング作成に失敗しました:サイズ4194304 [0x8007000E]のバッファ1104C69Cをロックできませんでした。
DrawBuffers()インデックスの範囲が、無インデックスバッファました(ファイル名: C:\ buildslave \ユニティ\ビルド\ランタイム/ GfxDevice/d3d11/DrawBuffersD3D11.cpp ライン:137)
Iこれらのエラーを検索し、解決策はありません。私はこれについていくつかの洞察を得ることができればと思います。
私は何をやっていたし、私は基本的に
を変更するプログラムはbyte[] _latestImage;
はもともとこの画像は
_videoTexture.LoadRawTextureData(_latestImage);
_videoTexture.wrapMode = TextureWrapMode.Clamp;
_videoTexture.Apply();
_videoPanelUIRenderer.sharedMaterial.SetTexture("_MainTex", _videoTexture);
ここで、_videoTexture
はTexture2D、_videoPanelUIRenderer
はレンダラーです。
これは正しく動作します。次に、配列_latestImageを処理して、関数ProcessSync
の中でGrayに変換しました。これは唯一の問題でもうまくいきます:配列が(グレーに)処理されているので、もがカメラによって自動的に更新されているため、テクスチャに適用するとちらつきがあり、灰色になることがあります。しかし、それ以外の、クラッシュはありません。
私の次のステップは、この新しい配列を処理してカメラからの新しいデータの干渉を受けずにテクスチャに適用できるように、処理機能の開始時に配列をコピーすることでした。
ので、私はやった:
void ProcessSync(byte[] rawimage, Matrix4x4 cTwMatrix, Matrix4x4 pMatrix)
{
int rr, gg, bb;
int p = 0;
int yval;
byte[] image=(byte[])rawimage.Clone();//<--THIS is the only change
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
{ //...some processing here
}
//Then apply it to the texture like indicated above
}
私はこれを適用すると、アプリケーションが正常に動作し、私はグレーの画像を取得していていることがわかります...しかし、いくつかの時間後に、それは上記のメッセージでクラッシュ。
私の画像は、私は
d3d11を推測896x504である:= 504 d3dfmt = 87 [887a0005]
896 hが何とかにTexture2Dが失敗したことを意味= W 2Dテクスチャをステージング作成に失敗しました作成される理由は何ですか?私のテクスチャは、ビデオモードが初期化されているときに一度だけ作成されるので、なぜこのようなことが起こるのか分かりません。
私は画像とのクローニングに関連したエラーが考えられます。誰も私をここで助けることができますか?
私は '.Clone()は'含まれるオブジェクトが値型であっても、浅いコピーを返すことアレイと確信しています。おそらく 'rawimage'が操作されたり廃棄されたりして、そのコピーで問題が引き起こされるのでしょう。あなたは代わりに深いコピーを作ることを見ることができます。私は100%コメントではない;-) – Equalsk