간단한 게임을 만들기 위해 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 game
은 game->draw()
기능으로 인쇄됩니다. finished frame
이 절대로 인쇄되지 않습니다. game->draw()
함수는 다른 파일에 있고 포인터를 가지고 있지 않아도 표시 함수를 재귀 적으로 호출하는 것처럼 보입니다. 이 효과를 코드로 보관할 수 있습니까? 그건 mingw-g ++의 버그입니까?
종종 octree는 안전하지 않은 함수 reinterpret_cast를 사용합니다. 이것이 문제의 근원 일 수 있습니까?
아주 거대하기 때문에 전체 소스 코드를 게시 할 필요가 없기를 바랍니다.
'draw' 함수를 봅시다 (적어도 동작을 재현하려면 트리밍해야 함). – chris
재귀 호출 (직접 또는 간접 재귀 중 하나)처럼 보입니다. 또는 콜 스택 (callstack) 손상. – Nawaz
게시물에 몇 가지 정보를 추가했습니다. – relgukxilef