내 프로젝트에 큰 문제가 있습니다 :OpenGL 텍스처 매핑 오류
NeHe 웹 사이트의 튜토리얼을 좋아하고 Windows XP에서 프로그램을 완벽하게 실행했습니다. 그러나 컴퓨터를 다시 포맷하고 OS를 Windows Vista로 변경하고 Dev-C++ 컴파일러를 다시 설치 한 다음 텍스처를 사용하는 C++ 프로그램을 열려고 시도했을 때 프로그램이 다운되었습니다.
내 glaux.h가 누락되었음을 알게되었습니다. 인터넷에서 파일을 발견하고 프로젝트를 재 컴파일했지만 여전히 충돌했습니다. 텍스처 함수를 제외하면 모든 것이 잘되었습니다.
어디서 문제가 발생하며 해결하려면 어떻게해야합니까?
저는 이들 중 하나가 범인이라고 생각했습니다 : Windows Vista OS, 그래픽 카드, glaux.h 및 라이브러리 (나는 괴롭힘을 알고 있습니다), OpenGL 자체.
.
업데이트 : 문제의 원인을 파악했습니다.
이 코드 덩어리가 충돌 내 프로그램을 발생 : 어떤 이유
if (TextureImage[0]) {
if (TextureImage[0]->data) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
, 내 프로그램은 항상 내가 사용 가능한 메모리에 주문할 때마다 충돌합니다. 이 섹션을 주석 처리했을 때, 내 프로그램은 모든 색이 어둡게 된 것을 제외하고는 잘 동작합니다 (내 비트 맵 파일의 색 때문이라고 생각합니다). 어떤 팁?
.
대답에 : 마티아스 Valdenegro
음,이 Windows XP를 사용할 때 잘 작동 NeHe의 lesson6에서 파생되었다. Windows Vista로 전환했을 때는 전혀 변경되지 않았습니다.
#define NoOfTextures 3
GLuint texture[NoOfTextures];
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[NoOfTextures];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("Data/Bitmaps/texture.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0] != NULL) {
if (TextureImage[0]->data != NULL) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
}
return Status;
}
:
당신은 그냥 알다시피, 여기에 전체 기능입니다.
추가 정보 :
나는 종종 내 프로젝트를 재건하고 LoadBMP() 같은 헤더 파일의 일부입니다. 다음은 LoadBMP() 함수입니다.
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
return NULL;
}
이것은 꽤 명확합니다.
어디에서 충돌이 발생합니까? 디버거를 사용하여 찾아냅니다. –
__ * 그래픽 드라이버를 최신 버전 * __으로 업데이트하고 프로그램이 충돌하는 코드 줄을 게시하십시오. – SigTerm
LoadBMP 기능을 게시 할 수 있습니까? 그것이 메모리를 올바르게 할당하고 있는지 확인하십시오. –