Bumbala
03-27-2006, 05:04 AM
Hello,
I want to load a bitmap with size other than powers of 2 as a texture. Here is the code:
bool CChildView::LoadTexture(CString sFileName, GLuint& uTexture)
{
if (sFileName.GetLength() <= 0)
return false;
FILE* f = fopen(sFileName, "r");
if (!f)
return false;
fclose(f);
AUX_RGBImageRec* pImg = auxDIBImageLoad(sFileName);
if (!pImg)
return false;
glGenTextures(1, &uTexture);
glBindTexture(GL_TEXTURE_2D, uTexture);
int nWidth, nHeight;
nWidth = 1;
while (nWidth <= pImg->sizeX)
nWidth *= 2;
nWidth /= 2;
nHeight = 1;
while (nHeight <= pImg->sizeY)
nHeight *= 2;
nHeight /= 2;
if (nWidth != pImg->sizeX &#0124;&#0124; nHeight != pImg->sizeY)
{
GLubyte* pNewData = (GLubyte*)malloc(nWidth * nHeight * 3 * sizeof(GLubyte));
int iErr = gluScaleImage(GL_RGB,
pImg->sizeX, pImg->sizeY, GL_UNSIGNED_BYTE, pImg->data,
nWidth, nHeight, GL_UNSIGNED_BYTE, pNewData);
if (iErr == 0)
{
free(pImg->data);
pImg->sizeX = nWidth;
pImg->sizeY = nHeight;
pImg->data = pNewData;
}
else
free(pNewData);
}
//gluBuild2DMipmaps(GL_TEXTURE_2D, 1, pImg->sizeX, pImg->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImg->data);
glTexImage2D(GL_TEXTURE_2D, 0, 3, pImg->sizeX, pImg->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImg->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
if (pImg->data)
free(pImg->data);
free(pImg);
return true;
}The textures appear distorted, where am I doing wrong?
Thanks!
I want to load a bitmap with size other than powers of 2 as a texture. Here is the code:
bool CChildView::LoadTexture(CString sFileName, GLuint& uTexture)
{
if (sFileName.GetLength() <= 0)
return false;
FILE* f = fopen(sFileName, "r");
if (!f)
return false;
fclose(f);
AUX_RGBImageRec* pImg = auxDIBImageLoad(sFileName);
if (!pImg)
return false;
glGenTextures(1, &uTexture);
glBindTexture(GL_TEXTURE_2D, uTexture);
int nWidth, nHeight;
nWidth = 1;
while (nWidth <= pImg->sizeX)
nWidth *= 2;
nWidth /= 2;
nHeight = 1;
while (nHeight <= pImg->sizeY)
nHeight *= 2;
nHeight /= 2;
if (nWidth != pImg->sizeX &#0124;&#0124; nHeight != pImg->sizeY)
{
GLubyte* pNewData = (GLubyte*)malloc(nWidth * nHeight * 3 * sizeof(GLubyte));
int iErr = gluScaleImage(GL_RGB,
pImg->sizeX, pImg->sizeY, GL_UNSIGNED_BYTE, pImg->data,
nWidth, nHeight, GL_UNSIGNED_BYTE, pNewData);
if (iErr == 0)
{
free(pImg->data);
pImg->sizeX = nWidth;
pImg->sizeY = nHeight;
pImg->data = pNewData;
}
else
free(pNewData);
}
//gluBuild2DMipmaps(GL_TEXTURE_2D, 1, pImg->sizeX, pImg->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImg->data);
glTexImage2D(GL_TEXTURE_2D, 0, 3, pImg->sizeX, pImg->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImg->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
if (pImg->data)
free(pImg->data);
free(pImg);
return true;
}The textures appear distorted, where am I doing wrong?
Thanks!