Meine Build-Umgebung ist wie folgt: Windows 8.1, VS2012, Desktop-Anwendung mit Windows 8.0 SDK und C++ gebaut.DXGI_FORMAT_YUY2 Texturen geben unterschiedliche RowPitch unter Windows 8.1 und Windows 10 zurück
Wenn ich mein Programm laufen auf Windows 8.1 die RowPitch druckt 2560 aber unter Windows 10 die gleichen Programm druckt 5120.
Was mache ich falsch hier?
Hier ist der Code, Danke für alle Antworten.
#include <d3d11.h>
static bool init_directx11(ID3D11Device **pDevice, ID3D11DeviceContext **pDeviceContext)
{
D3D_FEATURE_LEVEL featureLevels[] = {D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_1};
D3D_FEATURE_LEVEL featureLevel;
UINT createDeviceFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
HRESULT hr = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION, pDevice,
&featureLevel, pDeviceContext);
return SUCCEEDED(hr);
}
int _tmain(int argc, _TCHAR* argv[])
{
ID3D11Device *pDevice = nullptr;
ID3D11DeviceContext *pDeviceContext= nullptr;
if (!init_directx11(&pDevice, &pDeviceContext))
{
return FALSE;
}
D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC));
desc.ArraySize = 1;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.Format = DXGI_FORMAT_YUY2;
desc.MipLevels = 1;
desc.MiscFlags = 0;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.Width = 1280;
desc.Height = 720;
ID3D11Texture2D* pTexture2D = nullptr;
HRESULT hr = pDevice->CreateTexture2D(&desc, NULL, &pTexture2D);
D3D11_MAPPED_SUBRESOURCE mappedResource;
ZeroMemory(&mappedResource, sizeof(DXGI_MAPPED_RECT));
hr = pDeviceContext->Map(pTexture2D, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
printf("RowPitch = %d\n", mappedResource.RowPitch);
pDeviceContext->Unmap(pTexture2D, 0);
pTexture2D->Release();
pDeviceContext->Release();
pDevice->Release();
getchar();
}
Wie bereits erwähnt, ist es nicht wirklich wichtig, weil Sie die zurückgegebenen abgebildeten Werte verwenden soll. Ich habe dies als einen Unterschied zwischen Betriebssystem und Plattform-Team bemerkt. –
Nach dem Lesen dieses Beitrags habe ich die zugeordneten Werte verwendet. Wenn ich jedoch meine YUY2-Daten von einer Webcam in die Textur (die die doppelte Tonhöhe auf Win10 zurückgibt) kopiere, versuche diese Textur mit dem Pixel-Shader anzuzeigen, der Inhalt des Bildes erscheint in seiner Gesamtheit, füllt aber nur die Hälfte rechteckigen Bereich ich zeige sie an. Dies geschieht nicht unter Windows 8.1, das Bild wird korrekt angezeigt. Ich verstehe, dass Padding beteiligt ist, aber zweimal die Polsterung? –
Auch gemäß https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx sollen die Daten in einer YUY2-Textur zusammenhängend sein, so dass mein Bild angezeigt werden muss korrekt wie es auf Win 8.1 –