2016-08-22 5 views
2

Direct3Dを使用してピクセルデータをバイト配列としてダイナミックテクスチャにマップしようとしていますが、何らかの理由で結果のピクセルデータが黒で転送されません。私は前にupdatesubresourceを使ってこのコードを直接変換しましたが、今はmap/unmapを使っています。Direct3D Mapピクセル黒

ID3D11Texture2D* d3dtex = (ID3D11Texture2D*)textureHandle; 
assert(d3dtex); 

ID3D11DeviceContext* ctx = NULL; 
m_Device->GetImmediateContext(&ctx); 
D3D11_MAPPED_SUBRESOURCE mappedResource; 
ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE)); 

// Disable GPU access to the vertex buffer data. 
ctx->Map(d3dtex, 0, D3D11_MAP_WRITE, 0, &mappedResource); 
// Update the vertex buffer here. 
memcpy(mappedResource.pData, dataPtr, textureWidth * textureHeight * 4); 
// Reenable GPU access to the vertex buffer data. 
ctx->Unmap(d3dtex, 0); 

答えて

2

あなたはID3D11DeviceContext::Map関数からの戻りHRESULTをチェックされていません。テクスチャをマッピングできない可能性があります。 D3D11のテクスチャがマッピング可能でない理由はいくつかありますが、D3D11_CPU_ACCESS_WRITEアクセスフラグ(を呼び出してMapを使用している場合)で作成されていないことが最も明白です。 D3D11のデバッグ層を強制すると、デバッグ出力はその失敗に関する詳細なメッセージを出力します。

Unity内部で作成されたテクスチャのマッピングに頼っている場合は、マッピング可能であると想定しないでください。 UpdateSubresource(使用していた)を使用すると、テクスチャの作成に使用されたフラグに関係なく、より広く互換性があります。 ID3D11Texture2D::GetDescを使用してテクスチャのCPUAccessFlagsを照会し、使用する更新方法(マップ/更新)を決定することができます。

関連する問題