2013-07-22 2 views
0

간단한 게임을 만들기 위해 glut을 사용하고 있습니다. 함수가 완료되지 않습니다 어떤 이유로함수는 명백한 이유없이 호출자를 호출합니다.

std::chrono::duration<float> timeDelta = std::chrono::high_resolution_clock::now() - lastFrame; 
lastFrame = std::chrono::high_resolution_clock::now(); 
std::cout << (1/timeDelta.count()) << "fps" << std::endl; // print fps 

game->draw(); 

std::cout << "finished frame" << std::endl << std::endl; 

glutSwapBuffers(); 

및 콘솔 출력은 다음과 같습니다 : 과잉 디스플레이 콜백은 다음과 같습니다

166.639fps 
draw game 
166.667fps 
draw game 

가 무한 반복.

draw 기능은 다음과 같습니다

std::cout << "draw game" << std::endl; 
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); 
glClearColor(RENDER_BRIGHTNESS, RENDER_BRIGHTNESS, RENDER_BRIGHTNESS, 1); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

camera.draw(); 
world.draw(); 

//Bind 0, which means render to back buffer 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

glViewport(0, 0, width, height); 

glClearColor(1, 1, 1, 1); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width, 0, height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glBindTexture(GL_TEXTURE_2D, frameTexture); 
glGenerateMipmap(GL_TEXTURE_2D); 

glBegin(GL_QUADS); 
    glColor4d(1, 1, 1, 1); 
    glTexCoord2d(0, 0); glVertex2d(0, 0); 
    glTexCoord2d(1, 0); glVertex2d(width, 0); 
    glTexCoord2d(1, 1); glVertex2d(width, height); 
    glTexCoord2d(0, 1); glVertex2d(0, height); 
glEnd(); 

camera.draw() 단순히 GLS 행렬을 조작합니다. world.draw() 함수는 절두체 컬링 (여기에서 복사 : http://www.crownandcutlass.com/features/technicaldetails/frustum.html)을 사용하여 octree (이 구현을 사용하여 http://nomis80.org/code/octree.html)의 노드를 반복하고 큐브로 잎을 그립니다.

draw gamegame->draw() 기능으로 인쇄됩니다. finished frame이 절대로 인쇄되지 않습니다. game->draw() 함수는 다른 파일에 있고 포인터를 가지고 있지 않아도 표시 함수를 재귀 적으로 호출하는 것처럼 보입니다. 이 효과를 코드로 보관할 수 있습니까? 그건 mingw-g ++의 버그입니까?

종종 octree는 안전하지 않은 함수 reinterpret_cast를 사용합니다. 이것이 문제의 근원 일 수 있습니까?

아주 거대하기 때문에 전체 소스 코드를 게시 할 필요가 없기를 바랍니다.

+1

'draw' 함수를 봅시다 (적어도 동작을 재현하려면 트리밍해야 함). – chris

+1

재귀 호출 (직접 또는 간접 재귀 중 하나)처럼 보입니다. 또는 콜 스택 (callstack) 손상. – Nawaz

+0

게시물에 몇 가지 정보를 추가했습니다. – relgukxilef

답변

관련 문제