2012-08-12 2 views
3

저는 GLFW를 처음 사용하고 간단한 텍스처 매핑 프로그램을 만들었습니다. 문제는 taskmanager에서 명확하게 볼 수있는 메모리 자원이 증가하지 않는 프로그램을 실행하는 동안입니다.메모리 리소스 증가 논스톱

몇 분 동안 프로그램을 실행하면 컴퓨터의 팬 속도가 빨라지고 난방 문제가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 여기

여기 텍스처 로딩 기능

GLuint LoadTexture(const char* TextureName) 
{ 
    GLuint Texture; //variable for texture 
    glGenTextures(1,&Texture); //allocate the memory for texture 
    glBindTexture(GL_TEXTURE_2D,Texture); //Binding the texture 

    if(glfwLoadTexture2D(TextureName, GLFW_BUILD_MIPMAPS_BIT)){ 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
     return Texture; 
    }else return -1; 
} 

에 대한 코드가

void display() 
{ 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //clear background screen to black 

    //Clear information from last draw 
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective 
    glLoadIdentity(); //Reset the drawing perspective 

    glTranslatef(0.0f,0.0f,-35.0f); //Translate whole scene to -ve z-axis by -35 unit 


    GLuint text2D; 
    text2D = LoadTexture("cicb.tga"); //loading image for texture 

    glEnable(GL_TEXTURE_2D); //Enable texture 
    glBindTexture(GL_TEXTURE_2D,text2D);//Binding texture 

    glPushMatrix(); 
    glBegin(GL_POLYGON); //Begin quadrilateral coordinates 
    glNormal3f(0.0f, 0.0f, 1.0f);//normal vector 
    glTexCoord2f(0.0f, 0.0f); //Texture co-ordinate origin or lower left corner 
    glVertex3f(-10.0f,-11.0f,5.0f); 
    glTexCoord2f(1.0f, 0.0f); //Texture co-ordinate lower right corner 
    glVertex3f(10.0f,-11.0f,5.0f); 
    glTexCoord2f(1.0f, 1.0f);//Texture co-ordinate top right corner 
    glVertex3f(10.0f,-1.0f,-15.0f); 
    glTexCoord2f(0.0f, 1.0f);//Texture co-ordinate top left corner 
    glVertex3f(-10.0f,-1.0f,-15.0f); 

    glEnd(); //End quadrilateral coordinates 
    glPopMatrix(); 
    glDisable(GL_TEXTURE_2D); 


    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D,text2D); 
    glPushMatrix(); 

    glBegin(GL_POLYGON); 
    glNormal3f(0.0f, 0.0f, 1.0f); 
    glTexCoord2f(0.0f, 0.0f);//Texture co-ordinate origin or lower left corner 
    glVertex3f(-10.0f,-1.0f,-15.0f); 
    glTexCoord2f(10.0f, 0.0f); //Texture co-ordinate for repeating image ten times form 
    //origin to lower right corner 
    glVertex3f(10.0f,-1.0f,-15.0f); 
    glTexCoord2f(10.0f, 10.0f);//repeat texture ten times form lower to top right corner. 
    glVertex3f(10.0f,15.0f,-15.0f); 
    glTexCoord2f(0.0f, 10.0f);//repeat texture ten time form top right to top left corner. 
    glVertex3f(-10.0f,15.0f,-15.0f); 
    glEnd(); 
    glPopMatrix(); 
    glDisable(GL_TEXTURE_2D); //Disable the texture 
    glfwSwapBuffers(); 

} 

사람이 그때 다운로드 링크를 제공 할 수있는 EXE를 실행하여 문제를보고 싶다면 그리기 기능을위한 코드입니다.

답변

10

display()에 전화 할 때마다 질감이로드되는 것 같습니다. (본질적으로 프레임 당 한 번) 나는 그것이 어떤 시점에서 모든 기억을 취하는 것이라고 가정합니다. 디스플레이 기능을 벗어난 상태에서이 작업을 수행하기 만하면됩니다.

+0

display() 함수 밖에서 LoadTexture Funtion을 호출하면 이미지가로드되지 않지만 1을 반환합니다. GLuint 전역 변수를 만들고 해당 변수에 LoadTexture 함수에 의한 값 반환을 할당하고 display() 함수에 사용했습니다 . 내가 한 실수. –

+2

'1'은 glGenTextures에서 얻은 정확한 결과 일 수 있습니다. (즉, 모든 것이 괜찮습니다.) 오류를 나타내려면 대신 '-1'을 반환 할 수 있습니다. 디버거를 연결하고 얻은 값과 실행 경로를 확인하십시오. – Bart

+0

죄송합니다 바트, 귀하의 답변이 맞는지 확인하십시오. Iam은 C++에서 좋았지 만 열심히 노력했지만 실패했습니다. 여기 codeblock에서 컴파일 된 것은 poject 파일입니다 https://www.dropbox.com/sh/6iurx6sgps4oloc/p5IH070ykM/TextureGLFW.rar 내 전체 코드를 다운로드하고 제발 어리석은 실수를 보시겠습니까? 나는 해냈다. 그것은 작은 프로그램입니다. –

관련 문제