pajofego
2004-05-28, 17:40:17
Ich habe ein kleines Problem mit dem Erhöhen des Pointers um die nächste Reihe mit Werten in der Textur auslesen zu können. Wie und um wieviel muss ich den Pointer erhöhen damit ich die nächste Reihe auslesen kann? Danke.
// hier Textur mit Werten
hr = g_pd3dDevice->CreateTexture(g_SizeX, g_SizeY, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &g_pW0TopoTexture, NULL);
if (FAILED(hr)) return hr;
hr = g_pW0TopoTexture->GetSurfaceLevel(0, &g_pW0TopoTextureSurface);
if (FAILED(hr)) return hr;
// create main memmory texture for transfer operations
g_pd3dDevice->CreateTexture(g_SizeX, g_SizeY, 1, 0, D3DFMT_A32B32G32R32F, D3DPOOL_SYSTEMMEM, &g_pBigMainMemTexture,0);
g_pBigMainMemTexture->GetSurfaceLevel(0, &g_pBigMainMemSurface);
D3DLOCKED_RECT rfTextureLock;
float *fVectorData;
// transfer data from GPU to CPU
g_pd3dDevice->GetRenderTargetData(g_pW0TopoTextureSurface, g_pBigMainMemSurface);
// copy data into user pointer
g_pBigMainMemTexture->LockRect(0, &rfTextureLock, NULL, D3DLOCK_READONLY);
float fResult;
for( int y = 0; y < g_SizeY; y++ )
{
for( int x = 0 ;x < g_SizeX; x++ )
{
fVectorData = (float*)rfTextureLock.pBits;
fResult += fVectorData[x];
}
// ??? Wie pointer erhöhen ???
}
g_pMainMemTexture->UnlockRect(0);
// hier Textur mit Werten
hr = g_pd3dDevice->CreateTexture(g_SizeX, g_SizeY, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &g_pW0TopoTexture, NULL);
if (FAILED(hr)) return hr;
hr = g_pW0TopoTexture->GetSurfaceLevel(0, &g_pW0TopoTextureSurface);
if (FAILED(hr)) return hr;
// create main memmory texture for transfer operations
g_pd3dDevice->CreateTexture(g_SizeX, g_SizeY, 1, 0, D3DFMT_A32B32G32R32F, D3DPOOL_SYSTEMMEM, &g_pBigMainMemTexture,0);
g_pBigMainMemTexture->GetSurfaceLevel(0, &g_pBigMainMemSurface);
D3DLOCKED_RECT rfTextureLock;
float *fVectorData;
// transfer data from GPU to CPU
g_pd3dDevice->GetRenderTargetData(g_pW0TopoTextureSurface, g_pBigMainMemSurface);
// copy data into user pointer
g_pBigMainMemTexture->LockRect(0, &rfTextureLock, NULL, D3DLOCK_READONLY);
float fResult;
for( int y = 0; y < g_SizeY; y++ )
{
for( int x = 0 ;x < g_SizeX; x++ )
{
fVectorData = (float*)rfTextureLock.pBits;
fResult += fVectorData[x];
}
// ??? Wie pointer erhöhen ???
}
g_pMainMemTexture->UnlockRect(0);