2014-12-07 3 views
1

SDL을 사용하여 3D 엔진을 작성한 후 얼마 지나지 않아 엔진 건물 유형에 맞게 최적화 된 형식을 내보낼 수있는 편집기를 구현했습니다. 편집자는 매우 간단합니다. 객체는 단지 움직일 수 있고 텍스처와 모델은 바뀔 수 있습니다. 지금 당장은 OpenGL과 함께 SDL을 사용하여 모든 것을 렌더링하고 있지만 모든 플랫폼에서 네이티브로 보이는 것처럼 편집기의 GUI 부분에 Qt를 사용하고 싶습니다. 지금까지 잘 작동 했으므로 SDL 애플리케이션 내부에 QApplication을 실행 중이므로 기본적으로 SDL과 OpenGL을 사용하는 창과 Qt를 사용하는 두 개의 창을 엽니 다. 약간의 연구를 통해 QApplication을 수동으로 업데이트 할 수 있음을 발견했습니다. QApplication은 모든 스레딩 문제를 완전히 제거하고 모든 것이 작동합니다. 다만 경우에 당신이 시각화 힘든 시간을 보내고있어,을 heres 사진 :SDL, OpenGL 및 Qt 함께 사용

내 목표는 (내 노트북의이 같은) 정말 그것을 만드는 때문에 작은 화면에, 하나에이 창을 병합하는 것입니다 무엇

enter image description here

내가 결국 갖게 될 모든 다른 창을 추적하기가 어렵다. OpenGL을 사용하여 Qt로 렌더링하는 방법을 알고 있지만 SDL과 통합 할 수 있습니까? SDL 창을 사용하지 말고 편집기가 활성화 된 경우 QT를 사용해야합니까? 엔진이 에디터 모드에 있지 않을 때 명확히하기 위해, Qt, 그냥 SDL을 사용하지 않을 것이므로 최적으로이 작업을 수행 할 필요가 없습니다.

+1

'SDL 응용 프로그램에서 QApplication을 실행하고 있습니다.'라는 말은 단일 실행 파일에서 SDL과 Qt를 모두 시작하거나 SDL 창에서 Qt OpenGL 컨텍스트를로드하고 있다는 것을 의미합니까? 어쨌든 이것은 매우 흥미 롭습니다. Qt와 SDL을 실행하는 데있어 모든 소스를 공유하고 있습니까? –

+0

@ Alex720 둘 다 동일한 실행 파일에서 실행 중입니다. 기본적으로 다음과 같습니다. Init SDL, Init QT, updateQT updateEngine renderSDL 중 (실행 중). Qt 윈도우에 SDL 컨텍스트를 임베드하는 방법을 알고 싶습니다. – BlueSpud

+0

@BlueSpud - Qt 윈도우를 사용하고 있기 때문에 SDL을 datenwolf가 제안한 종속성으로 떨어 뜨릴 수도 있습니다. SDL은 이미 Qt에 포함되어 있습니다. 중복을 제거하십시오. 또한이 비디오는 Qt를 사용하여 타사 OpenGL 렌더링을 퍼갈하는 데 도움이 될 수 있습니다. https://www.youtube.com/watch?v=GYa5DLV6ADQ – dtech

답변

0

SDL 부분을 버리십시오. SDL이하는 모든 일을하는 Qt도 있습니다. QGLWidget을 서브 클래 싱하여 사용하십시오.

+2

엔진이없는 경우 SDL을 삭제하고 싶지 않습니다. 에디터 모드에서는 Qt와 상호 작용하지 않기 때문에 SDL을 유지해야합니다. – BlueSpud

+0

@ BlueSpud : 그렇다면 완전히 다른 두 가지 프로그램을 다루는 것입니다. 따라서 엔진을 라이브러리에 빌드하고이 라이브러리를 독립 실행 형 런타임과 편집기라는 두 개의 별개의 실행 파일에 연결하는 것이 좋습니다. 런타임은 SDL을 사용하고 편집기는 Qt를 사용합니다. – datenwolf

+0

정직하게 말하면, 오히려 별개의 창문에 보관하십시오. – BlueSpud

0

게임과 에디터를 별도의 프로세스로 유지하면서도 동일한 앱에 포함시킬 수 있습니다.

게임을 Qt의 일부로 실행하고 적어도 윈도우에서는 게임에 윈도우 핸들을 전달하고 게임을 만들 때 대신 설정하는 것이 좋습니다. SDL에서 직접 윈도우를 열고 OpenGL 컨텍스트를 바인딩하면 실제로는 기존 핸들에 바인딩 할 수 있습니다.

입력 포커스와 관련하여주의해야 할 몇 가지 문제점이 있습니다 (directX로 테스트했지만 SDL과 유사 할 수도 있음). 문제는 포 그라운드 모드가 "루트"윈도우에 대해 몇 가지 바보 검사를한다는 것인데, 나를 위해 OpenGL 컨텍스트를 소유 한 윈도우가 아니기 때문에 초기화에 실패했습니다. 그러나 배경 모드가 작동했습니다. 나는 이것이 내가 생각하기에 조이스틱을위한 것이라고 생각하지만, 어쨌든, 그것이 모든 것을 함께 합칠 수있는 방법이다.