2011-01-25 3 views
0

우주선의 홀을 가로 지르는 사람을 움직이는 응용 프로그램이 있습니다. 나는 또한 응용 프로그램이 링크하는 OpenGL DLL을 만들었습니다. 이 OpenGL DLL의 목적은 특정 호출을 가로 채고 이러한 호출이 가로 챌 때 작업을 수행하는 것입니다.객체를 텍스처링 할 때 OpenGL 응용 프로그램이 흐려집니다.

내가 가로 채기에 관해 염려하는 주된 호출은 wglSwapBuffer (나는 그게 그 이름이라고 생각한다)이다. 이 호출에서 나는 3D 오브젝트 (반구 또는 반 실린더)를 렌더링하고 각 꼭지점의 텍스처 좌표를 지정합니다. 그런 다음 프레임 버퍼의 출력을 캡처하여 glCopyTexImage2D 등을 사용하여 구의 내용을 텍스처링합니다.

내가 그 모든 것을 한 후에, 나의 dll은 진짜 dll과 실제 swapbuffer 메서드를 호출한다.

응용 프로그램과 같은 폴더에 dll을 배치하면 그래픽이있는 돔이 그려집니다. 내가 예상하지 못한 것은 화면이 끊임없이 희미해진다는 것입니다. 그것이 의미하는 바는 모든 것이 정상으로 보이는 것처럼 보이고 두 번째 간격을 지나면 화면이 검은 색으로 변색되어 정상으로 돌아올 것입니다. 이것은 약 1 초의 평균 빈도로 반복되며 때로는 더 빠르거나 때로는 느려지므로 프로세서가 작동하는 것이 어렵다고 판단됩니다.

아이디어가 있으십니까?

+0

그래서 내가하는 일은 화면을 지우고, 크기를 조정하고, 대상과 텍스처를 렌더링하는 것입니다. 만약 내가 화면을 지우거나 크기를 조정하거나 텍스쳐를 사용하지 않는다면, 애니메이션은 정상적으로 보일 것입니다. 그러나 텍스처 버퍼링을하지 않고 스왑 버퍼 메소드에 3D 오브젝트를 그릴 때 애니메이션은 여전히 ​​정상적으로 보일 것입니다. 주기적으로 사라지는 개체가 나타납니다. – Adham

+0

DLL에서 변경된 GL 상태를 복원해야합니까? – genpfault

+0

상태별로 활성화 된 항목을 사용 중지하겠습니까? – Adham

답변

1

블렌딩을하는 것이 었습니다. 따라서 swapbuffer 메서드에서 블렌딩을 비활성화하고 내 물건을 처리 한 다음 블렌딩을 다시 활성화하면 이제 작동합니다.

관련 문제