2

基本的なテクスチャ (1024x1024) を読み込んで単色で塗りつぶそうとしています:

unsigned char *texArray = (unsigned char *)malloc(4 * 1024 * 1024 * sizeof(unsigned char));

for (int i = 0; i < 1024 * 1024 * 4; i++) {
    texArray[i] = (unsigned char)125;
}

D3D11_TEXTURE2D_DESC desc;
desc.Width = 1024;
desc.Height = 1024;
desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;

ID3D11Texture2D *pTexture = NULL;

D3D11_SUBRESOURCE_DATA TexInitData;
ZeroMemory(&TexInitData, sizeof(D3D11_SUBRESOURCE_DATA));
TexInitData.pSysMem = texArray;
TexInitData.SysMemPitch = static_cast<UINT>( 1024*4 );
TexInitData.SysMemSlicePitch = static_cast<UINT>( 4 * 1024 * 1024 * sizeof(unsigned char) );

GraphicsBase.DXDevice->CreateTexture2D( &desc, &TexInitData, &pTexture );
GraphicsBase.DXDevice->CreateShaderResourceView(pTexture, NULL, &DXTextureContent);

を使用するDXTextureContentと、テクスチャがすべて白く表示されます。RGBA の 125/125/125/125 でテクスチャを埋めています。ここで何か不足していますか?

4

2 に答える 2

3

D3D11_CREATE_DEVICE_DEBUGデバイスの作成時にフラグを設定して、常に DX11 アプリケーションを開発する必要があります。

これにより、各 D3D 呼び出しは可能な限り詳細になり、CreateTexture2D はここで無効なパラメーター エラー コードで失敗します。

D3D11 では、リソースの説明を初期化するクラス ヘルパーが導入されましたCD3D11_TEXTURE2D_DESC

于 2013-08-24T11:44:40.377 に答える
1

最初に TexInitData の SysMemPitch を設定していません。0 のピッチはおそらくあなたが求めているものではなく、テクスチャを塗りつぶす方法に影響を与えている可能性があります。おそらく、このメンバーを (1024 * 4) に設定したいと思うでしょう。

于 2013-07-26T19:34:27.317 に答える