PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Texturen auslesen


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);

D-Swat
2004-05-28, 18:22:04
pointer += breiter der texture * speicherplatz pro pixel

breite = g_sizeX?
speicherplatz pro pixel = D3DFMT_A32B32G32R32F = 128 bit pro pixel = 4byte

also pointer += g_sizeX*4

pajofego
2004-05-28, 18:36:25
Danke und danke auch für die Erklärung, funktioniert auf anhieb! Werde jetzt mal nachschauen ob auch alle pixelchen dabei sind :)

Gruss pajofego