2016-09-09 11 views
0

C++から画像をUnityテクスチャにコピーしようとしています。画像は320x240ピクセルで、RGBA形式です。私はイメージが大丈夫であることを確認しました。私はUpdateSubresourceを使用しコピーするにはUpdateSubresourceはどのくらいのコピーを知っていますか?

は、ここでのコードは次のとおりです。

GraphicDeviceD3D11* gdevice = (GraphicDeviceD3D11*)graphic_device; 
ID3D11DeviceContext* ctx = NULL; 
gdevice->d3d11device->lpVtbl->GetImmediateContext(gdevice->d3d11device, &ctx); 

if (texturePointer) { 
    ctx->lpVtbl->UpdateSubresource(ctx, (ID3D11Resource *)texturePointer, 0, NULL, image, imageWidth * 4, 0); 
} 

ctx->lpVtbl->Release(ctx); 

私はほとんどd3d11の専門家だ、と私はこの関数を正しく使用していますかわかりません。 UpdateSubresourceに渡されるイメージのパラメータは、イメージバッファポインタとストライドのみですが、イメージの高さやバッファの長さではありません。

UpdateResourceは、いつコピーを停止するかを知っていますか?

このコードはいくつかの画像で私の役に立つものでしたが、他の人にとってはうまくいきませんでした。メモリ上で画像バッファサイズを超えてアクセス違反が発生しました。

誰かがそれに賛成できますか?

+0

'lpVtbl'とは何ですか?仮想テーブルのいくつかの並べ替え?ドキュメントはそのポインタについて何も言わない。 – Rakete1111

答えて

1

機能を正しく使用しています - 目的のリソース(あなたのケースではtexturePointerと呼ばれます)にすべての必要なデータが含まれていて、メソッドが期待通りに機能します。

ただし、これはどういう意味ですか?lpVtblは間接ですか? C++を使用している場合(cではなく)、COMメソッドを呼び出すには、単純なpInstance->Method()のアプローチをとるべきでしょう。

+0

それは私のコードではないので、私は完全には分かりません。しかし、私はlpVtblを使用しないとコンパイルされません。私はこれを深く知る必要があります。ありがとう! – Nitay

+2

@Nitay 'lpVtbl'は、[' __cplusplus'](http://stackoverflow.com/questions/3789340/combining-c-and-c-how-does-ifdef-cplusplus-work)のいずれかが指定されていれば、D3D11ヘッダによって公開されます。 )は定義されていない(C++としてコンパイルされていない)か、または "CINTERFACE"が定義されている(Cインタフェースを強制する)。 – MooseBoys

+0

@MooseBoysはいそれは問題です - 私はCを使用しています。ずっと長い間コードを見て、私はそれを完全に忘れていました。ありがとう! – Nitay

関連する問題