1

プロジェクトの1つで必要だったので、DX10の共有リソース機能を試しています。しかし、特にSlimDXを使用しているサンプルやコードはあまり見つかりません。DX10のドキュメントによると、リソースをSharedとして指定するだけで、別のアプリケーションからOpenSharedResource()を使用してリソースを開くことができます。SlimDXの簡単なテストアプリケーションで、私は次のことをしました

        Texture2D tex = new Texture2D(device, new Texture2DDescription()
        {
            ArraySize = 1,
            BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,
            CpuAccessFlags = CpuAccessFlags.None,
            Format = Format.B8G8R8A8_UNorm,
            Height = 128,
            Width = 128,
            MipLevels = 1,
            OptionFlags = ResourceOptionFlags.Shared,
            SampleDescription = new SampleDescription(1, 0),
            Usage = ResourceUsage.Default,
        });

        Texture2D tex2 = device.OpenSharedResource<Texture2D>(tex.ComPointer);

しかし、私はこのエラーを受け取り続けます

 E_INVALIDARG: An invalid parameter was passed to the returning function (-2147024809)

tex.ComPointerがOpenSharedResourceの正しいポインターではないか、Texture2Dがサポートされていないため、何が悪かったのか理解できないようです(ドキュメントに記載されていないことは明確に述べられていません)。

CreateTexture関数に渡されるpHandleを指定することによる他の代替手段は、SlimDXで利用できないか、私はそれを認識していません。

これをうまく試した人はいますか?いくつかの助けはありがたいです。

ありがとう

4

1 に答える 1

3

コードに問題が見つかりました。DXGIを使用して(ポインターではなく)共有ハンドルを取得する必要があります。次のコードは完全に機能します

SlimDX.DXGI.Resource r = new Resource(tex);

Texture2D tex2 = device.OpenSharedResource<Texture2D>(r.SharedHandle);
于 2010-07-07T18:25:57.860 に答える