ok here is the whole function:
Code:
DWORD screenY = 600;
DWORD screenX = 650;
DWORD addr1=0,addr2=0;
if(bgBuffer == NULL)
{
try
{
bgBuffer = new DWORD[screenY*screenX];
}
catch(std::bad_alloc error)
{
MessageBox(0, error.what(), 0, 0);
PostQuitMessage(0);
}
}
int camX = (int)cam->GetBgX();
int camY = (int)cam->GetBgY();
DWORD screenoffset=0;
int imgwidth=sizeX;
int spritepixelx=((camX) % sizeX);
int spritepixely=((camY) % sizeY);
if(spritepixelx < 0 || spritepixely < 0)
return;
WORD spritepixeloffset=(spritepixely*sizeX)+spritepixelx; //This should be spritepixelx
WORD ycounter=0;
WORD xcounter=0;
DWORD screensize=screenY*screenX;
WORD spritexcounter=spritepixelx;
WORD spriteycounter=spritepixely;
spriteycounter = spriteycounter;
WORD spriteybottom = spritepixely*sizeX;
for(DWORD screencounter=0;screencounter<screensize;screencounter++)
{
bgBuffer[screenoffset]=imageBuf[spritepixeloffset];
screenoffset+=screenX;
spritepixeloffset+=sizeX;
ycounter++;
spriteycounter++;
if (spriteycounter >= sizeY)
{
spritepixeloffset=spritexcounter;
spriteycounter=0;
}
if (ycounter>=screenY)
{
ycounter=0;
xcounter++;
spritexcounter++;
spriteycounter=spritepixely;
if (spritexcounter>=sizeX) spritexcounter-=sizeX;
spritepixeloffset=spriteybottom+spritexcounter;
screenoffset=xcounter;
}
}
if(!glIsEnabled(GL_TEXTURE_2D))
glEnable(GL_TEXTURE_2D);
if(bgTexture)
glDeleteTextures(1,bgTexture);
glGenTextures(1, bgTexture);
glBindTexture(GL_TEXTURE_2D, bgTexture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 4, screenX, screenY, 0,
GL_RGBA, GL_UNSIGNED_BYTE, (DWORD*)bgBuffer);
glDisable(GL_TEXTURE_2D);
This happends on a winXP home system, AMD Athlon 2200+, and 512 ram with VS.NET 2002.