2009-11-25 1 views
2

C++에서 3D-Stereo OpenGL 프로그램을 작성했습니다. 디스플레이에서 timeBetinPeriod (1) 뒤에 timeGetTime을 사용해야하는 위치 개체를 추적합니다. "디버깅 시작"을 사용하여 프로그램을 실행하면 내 객체가 화면에서 부드럽게 움직입니다 (필요한 경우). "디버깅하지 않고 시작"을 사용하여 프로그램을 실행하면 여러 화면 새로 고침을 위해 객체가 일시적으로 정지 한 다음 새 위치로 이동합니다. 이 문제의 원인과 해결 방법에 대한 의견이 있으십니까?OpenGL이 "디버깅 시작"대 "디버깅하지 않고 시작"옵션에서 다르게 동작하게하는 원인은 무엇입니까?

편집 : 마우스 버튼을 클릭하면 "디버깅하지 않고 시작"을 실행하면 잠시 후 jerkiness가 해결 될 수 있습니다. 내 응용 프로그램은 콘솔 응용 프로그램입니다 (프로그램을 시작할 때 일부 매개 변수를 사용합니다). 이 두 옵션 사이에 윈도우 포커스가 다를 수 있습니까? 콘솔 창에서 입력을 끝내면 OpenGL 창 (glutFullScreen();을 통해 전체 화면)으로 포커스를 강제로 전환하는 명시적인 방법이 있습니까?

감사합니다.

+0

릴리스 빌드는 어떻게 수행되며 전반적인 CPU 사용량은 어떻습니까? –

+0

거의 전적으로 개발 환경에서 작업하고 CPU 사용은 렌더링하는 간단한 디스플레이에서 문제가되어서는 안되며 릴리스 빌드를 빌드 한 적이 없습니다. 그렇게하기위한 최근의 시도는 올바르게 링크를 거부 한 화면 캡처 라이브러리에 의해 방해 받았습니다. 프로세스를 실행하는 코어에 대한 CPU 활용도는 높지만 거의 단절되었습니다. – russellpierce

답변

0

디버깅되고 디버깅되지 않는 동안 프로그램이 다르게 동작하게하는 가장 일반적인 원인은 초기화되지 않은 변수를 사용하고 특히 초기화되지 않은 메모리를 읽는 것입니다. 그 일을하지 않았는지 확인하십시오.

뭔가 더 OpenGL 특정 - 명령을 플러시하는 데 문제가있을 수 있습니다. 모든 프레임을 그릴 후 glFinish()을 삽입 해보십시오.
동결이 발생할 때 실제로 프레임이 렌더링되고 전체 응용 프로그램이 고정되지 않는지 확인하는 것이 도움이 될 수 있습니다. OpenGL이 그 일을하는 것처럼 보이기 때문에 로직에 버그가있을 확률이 더 높습니다.

+0

조언 해 주셔서 감사합니다. 명백한 동결 동안 프레임이 여전히 렌더링되는지 여부를 결정하는 방법에 대한 제안? 이전에 그 파일을 검사하려고 시도했지만 파일 작성으로 인한 속도 저하가 그 일이 무엇이든지간에 모호한 것임을 알았습니다. 이것은 120Hz의 스테레오 디스플레이이므로 내 전체 디스플레이 루프를 통과하려면 약 8.33ms가 필요합니다. – russellpierce

+0

일반적으로 디버그 빌드는 디버거를 통해 실행되는지 여부와 관계없이 정확히 동일한 방식으로 메모리를 초기화합니다. 창에서 여전히 디버그 런타임 라이브러리를 사용하게됩니다. 릴리스 빌드로 이동할 때 큰 차이를 만들 수 있습니다. –

1

timeGetTime API의 정밀도는 10ms뿐입니다. 측정하는 간격이 50ms 미만이면 시스템 타이머에서 예상되는 편차의 효과를 볼 수 있습니다. 왜 디버거가 이것에 영향을 미칠지 전혀 모르겠지만 시스템의 전체 작동은 블랙 박스입니다. QueryPerformanceCounter을 사용하면 더 높은 해상도의 타이밍을 얻을 수 있으므로 도움이 될 수 있습니다.

+0

고마워, 나는 그것을 살펴볼 것이다. 나는 timeBeginPeriod (1)가 정확하게 1ms로 해상도를 낮추고 있다고 생각했다. 해상도가 @ 10ms 인 경우 내 코드에 문제가 발생할 수 있습니다. – russellpierce

+0

@drknexus timeGetTime 및 timeBeginPeriod에 대한 문서는 1ms임을 의미하지만 사용 가능한 하드웨어에 크게 의존하는 것으로 보입니다. 나는 "현대"하드웨어가 이것을 고칠 수 있다고 생각한다. 내가 그걸 가지고 놀았으니 몇 년이 지났다. 이것은 내가 10ms 값을 기억하는 곳이지만, 몇 년 전의 것입니다 : http://support.microsoft.com/kb/172338 –

관련 문제