2012-02-16 6 views
0

내 프로그램에서 OpenGL을 사용하여 무언가를 그리는 다른 응용 프로그램을 실행하고 draw해야합니다.OpenGL을 사용하여 다른 응용 프로그램 창 그리기

Windows 또는 Qt에서이 작업을 수행하려면 어떻게해야합니까?

해답은 here입니다.

+0

자세한 내용을 알려주거나 예제 코드를 제공해주십시오. "내 프로그램에서 다른 응용 프로그램을 실행해야합니다"라는 것은 무엇을 의미합니까? 당신은 당신의 프로그램에서 새로운 과정을 시작합니까? – tr9sh

+0

지금은 코드가 없습니다. "당신은 당신의 프로그램에서 새로운 과정을 시작합니까?" 예, 그렇게 생각합니다. 나는 실행할 프로그램 (exe 파일)을 선택하고,이 프로그램에 의해 그려진 이미지 (OpenGL에 의해)를 얻고, 그것을 텍스처로 사용하고, 일부 변형하고 원래 이미지를 다시 복제한다. – Jeka

+0

@ Jeka : 조금 더 자세히 설명해 주시겠습니까? 이미 응답 한 후킹과 같이이 작업을 수행하는 솔루션이 안티 바이러스/안티 치트 프로그램과 같은 것을 유발할 수 있음을 알아야합니다. – KillianDS

답변

0

다른 응용 프로그램 (OpenGl로 smth를 그리는)을 실행하고 그 안에 그립니다.

이 프로그램에서 그린 이미지를 OpenGL로 가져 와서 텍스처로 사용하고 변형 한 다음 원래 이미지를 다시 복제합니다.

두 가지가 다소 다릅니다. 명확한 설명에 따라 원하는대로하려면 "가장 쉽고"가장 깨끗한 방법 ( 인 것입니다. SwapBufferswglSwapBuffers은 내부적으로 호출합니다. 3 가지를 모두 확인하거나 연결해야합니다).

그렇다면 유효한 컨텍스트 핸들을 소유하고 버퍼가 스왑 된 시점에서 프레임 버퍼 내용이 유효하고 일관성이 있다는 것을 반드시 확인하십시오. 반원형 원시는 존재하지 않습니다. 따라서 프론트 또는 백 버퍼 (또는 둘다!)를 다시 읽거나, 커널을 실행하거나, 응용 프로그램에 제어권을 반환하기 전에 다시 써야하는 것도 아무 것도 없습니다. 컨텍스트 핸들 이후

안정적으로 문제없이 일부 정말 불쾌한 해킹없이 작동 과정 유일한 방법에 대해서만 유효합니다 (이보다 더 불쾌한 이미) 많은 도구 등처럼 가짜 opengl32.dll를 삽입하는 것입니다 GLIntercept처럼.
미니 디버거에서 핸들을 "훔칠"수는 있지만 프로세스에는 유효하지 않으므로 사용하지 마십시오.

하지만 ... datenwolf가 말한 것처럼 : 그냥하지 마십시오.

+0

오, 외모가 정말 심하다. 그래서 같은 방식으로 작동하는 FPS (프로그램상의 FPS를 나타냄)와 같은 프로그램이 있습니까? – Jeka

+0

아마도. 실제 FPS _display_는 사소한 것입니다.이 작업은 GDI 이외의 것을 사용하여 계층화 된 창으로 수행 할 수 있습니다. 그러나 FPS는 버퍼가 언제 전환되었는지 (또는 얼마나 자주) 알고 있어야하기 때문에 어쨌든 API 후킹을해야 할 필요가있을 것입니다. 유일한 대안은 일부 IHV 특정 성능 카운터를 읽는 것입니다.하지만 문제는 그만큼 덜 휴대 할 수 있습니다 ... – Damon

+0

적어도 앱에서 처리 할 이미지를 얻을 수 있습니까? 이 최신 정보를 유지하기 위해 후크를 사용해야합니까? – Jeka

0

Windows에서는 매우 어둡고 더러운 해킹 만 사용합니다. 나는 그것을 추천하지 않는다. Qt는 프레임 워크 일 뿐이며, 이는 기반 OS에 달려 있습니다. Windows에서는 Windows의 모든 제한 사항이 적용됩니다.

X11에 당신은 두 가지 모드에서의 OpenGL 컨텍스트를 만들 수 있습니다 직접 또는 간접적으로 (glXCreateContext 및 glXCreateNewContext의 직접 매개 변수 참조) . 간접 컨텍스트는 X 클라이언트간에 공유 될 수 있습니다. X 서버에는 프로세스 나 개별 클라이언트가 없기 때문입니다. OpenGL 컨텍스트 중 하나 인 XID 만 있습니다. 이를 통해 동일한 X 디스플레이에 연결된 프로세스간에 간접 OpenGL 컨텍스트의 XID를 전달할 수 있습니다. 직접 컨텍스트는 GLX 프로토콜을 우회하므로 공유 될 수 없습니다.

+0

"Windows에서는 매우 애매하고 더러운 해킹 만 사용합니다."나는 이해하지만 실제로 필요합니다.Qt는 프로젝트의 다른 부분을 작성한 프레임 워크이므로이 앱에서 사용하려고합니다. X11 설명을 보내 주셔서 감사합니다. 그러나 저에게는 흥미롭지 않습니다. – Jeka

+0

@ Jeka : Win2k에서 한 번 작동했던 해킹이 여전히 있는지조차 알지 못합니다. 실제로 다른 프로그램의 컨텍스트에서 디버거 및 OS 함수를 호출하는 것처럼 자신의 프로그램을 다른 프로그램에 연결합니다. 이것은 실제로 믿을 수없고 일하기가 쉽지 않은 무언가입니다. RPC 인터페이스를 OpenGL 기능에 제공하면 효과가 있습니다. – datenwolf

관련 문제