Ich möchte die Größe eines D3D11Texture2D ändern, um es kleiner zu machen. Zum Beispiel habe ich eine Textur in 1920x1080 und ich möchte sie zum Beispiel 1280x720 skalieren. Nur damit Sie wissen, dass ich überhaupt nicht zeichne, möchte ich nur den Byte-Puffer skaliert bekommen. Hier ist mein Code:Größe ändern D3D11Texture2D DirectX 11
if (mRealTexture == nullptr) {
D3D11_TEXTURE2D_DESC description;
texture2D->GetDesc(&description);
description.BindFlags = 0;
description.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
description.Usage = D3D11_USAGE_STAGING;
description.MiscFlags = 0;
hr = mDevice->CreateTexture2D(&description, NULL, &mRealTexture);
if (FAILED(hr)) {
if (mRealTexture) {
mRealTexture->Release();
mRealTexture = nullptr;
}
return NULL;
}
}
mImmediateContext->CopyResource(mRealTexture, texture2D);
if (mScaledTexture == nullptr) {
D3D11_TEXTURE2D_DESC description;
texture2D->GetDesc(&description);
description.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
description.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
description.Width = 1440;
description.Height = 585;
description.MipLevels = 4;
description.ArraySize = 1;
description.SampleDesc.Count = 1;
description.SampleDesc.Quality = 0;
description.Usage = D3D11_USAGE_DEFAULT;
hr = mDevice->CreateTexture2D(&description, NULL, &mScaledTexture);
if (FAILED(hr)) {
if (mScaledTexture) {
mScaledTexture->Release();
mScaledTexture = nullptr;
}
return NULL;
}
} //I want to copy the mRealTexture on the mScaledTexture, map the scaledTexture and get the buffer.
Vielen Dank für Hilfe
https://stackoverflow.com/a/24070486/8111865 könnte Ihnen helfen - es funktioniert nicht Code, sondern eine allgemeine Übersicht über die Größenänderung einer Ressource mit Direct2D und DXGI. – ozeanix
Schade, es gibt keinen Beispielcode ... Ich denke, viele Leute müssen das tun ... Es ist zu vage, um die Schritte zu verstehen, die unternommen werden müssen. (In code ich meine) – DevAndroid
Ich weiß, es klingt banal und ich meine es nicht so, aber versuchen Sie realistische Pseudocode für den Überblick zu schreiben und verwenden Sie die MSDN-Dokumentation für jede Schnittstelle, um es langsam in eine echte Umsetzung zu verwandeln. Arbeiten Sie zunächst mit kleinen Teilen und schauen Sie sich Ihre HRESULTs an. Ich habe festgestellt, dass die Arbeit mit DirectX und ähnlich strukturierten Dingen wie DirectShow und Media Foundation sehr frustrierend sein kann, aber es erfordert nur eine Investition von Zeit und Mühe, um es wirklich zu lernen. Sobald Sie das tun, werden Lösungen für solche Probleme sehr natürlich sein, da Sie eine Fülle von Kenntnissen darüber haben, was DirectX tun kann und wie Sie es tun. – ozeanix