2013-02-18 3 views
0

OpenTK (OpenGL)로 작성된이 멋진 C# 응용 프로그램을 가지고 있습니다 ... 전체 화면 GL 창을 사용하며 가능한 경우 언제든지 OnRenderFrame 메서드를 자동 실행하여 멋진 60FPS 게임을 얻습니다.opentk glcontrol auto render?

하지만 GL 윈도우가 아닌 Windows Form의 GLControl에서 게임을 사용하고 싶습니다. 어떤 이유로 든 onrenderframe 메서드를 한 번 실행하면됩니다. 나는 그것들의 문서에서 말하는 것처럼 그것을 실행하기 위해 Application.Idle을 사용하여 시도했지만 초당 약 5 프레임을 얻게된다.

원래 응용 프로그램과 같이 루프에서 실행되도록하려면 어떻게해야합니까?

편집 : 기본적으로 내가 뭘 찾고 있는지 게임과 비슷합니다. 런 (60) 초당 60 프레임에서 OpenGL 창을 초기화하는 데 사용할 것입니다.

+0

이미 시도한 코드를 제공해 주시겠습니까? – antonijn

+0

MainForm.Load 이벤트는 Application.Idle + = OnRenderFrame이라는 load() 메서드를 시작합니다. 이것은 초당 약 6 프레임을 가져옵니다. – sableguy00

+0

WOAH! 나는 아주 이상한 것을 발견했다. application.idle을 사용하여 프레임을 업데이트합니다. 창에서 마우스를 계속 옆으로 흔들거나 키보드의 키를 누른 채로 있으면 초당 60 프레임을 유지합니다. 왜 그런 일이 일어나고 어떻게하면 항상 그렇게 할 수 있을까요 ?? – sableguy00

답변

0

GLControl.Invalidate()를 1/60 초마다 호출하는 타이머를 만듭니다. 또한 Application.Idle을 사용하여 예기치 않은 동작이있는 애니메이션을 실행하는 것을 권장하지 않습니다. 버퍼를 올바르게 교환하고 있습니까?

0

GLControl은 이벤트 기반이므로 모든 프레임은 수동 GLControl.Invalidate() 호출 후에 만 ​​렌더링됩니다.

실제로 항상 높은 fps가 필요하지 않습니다. 변경 사항 만 렌더링하면됩니다. 따라서 시스템 리소스가 적기 때문에 가변 fps로 충분할 수 있습니다.

입력이 활성화되어있는 동안 입력 장치에 따라 달라지는 Fps 값입니다. 예를 들어, 내 터치 패드는 초당 60 이벤트를, 1000Hz 샘플링 주파수를 갖는 a4tech 마우스는 동일한 기본 샘플에서 약 750fps를 얻습니다.

어쨌든 상수 fps를 고집하는 경우 타이머에서 Invalidate()를 호출 할 수 있습니다.