opengl 어플리케이션을 실행할 때 "DISPLAY=:번호"의 의미
글쓴이: shifted / 작성시간: 월, 2007/03/26 - 2:34오후
현재 ubuntu edgy에서 xgl을 환경에서 사용 중입니다.
openGL을 사용하는 특정 게임을 실행할 때
~$ DISPLAY=:0 실행command
로 실행하지 않으면 3D 가속이 되지 않아 실행되지 않습니다.
위의 게임이 풀스크린으로 실행되는데 DISPLAY=:0 옵션으로 실행하면
alt+tab으로 다른 작업들은 선택할 수 없는데 당연한 것인지요.
DISPLAY=:0가 의미하는 것이 무엇인지 궁금합니다.
Forums:
제 생각은...
엑스윈도는 하나의 호스트에 여러개의 엑스윈도서버가 실행될 수 있습니다.
그래서 하나의 호스트 주소에 다시 몇번째 엑스윈도 서버인지를 지정해주는 방법입니다.
예) localhost:0, localhost:1 ...
그래서 추측하는걸로는 :0번 서버만이 opengl을 제대로 사용하도록 설정이 되었거나 그런거 같은데요?
(네트웍을 통해서 오는게 아니라 :0으로 지정하면 바로 로컬에서 직접 실행한다는 것을 알 수 있으므로 가속기능을 지원할 수 있겠죠.)
DISPLAY=:0 ./foo
이렇게 DISPLAY 환경변수를 이용하셔도 될거 같습니다.
X서버를 :0, Xgl을 :1에
X서버를 :0, Xgl을 :1에 등록해서 쓰시는 모양인것 같네요?
Xgl은 OpenGL로 구현한 X서버입니다. 리눅스의 OpenGL구현이 대부분 X위에 구현되어 있기 때문에 Xgl을 사용하려면 다음과 같은 모양이 됩니다.
그런데 Xgl에서는 Direct Rendering이 지원이 안됩니다. 즉 OpenGL을 사용할 때 하드웨어 가속의 도움을 받기가 힘듭니다. 그래서 위에서 말씀하신 것과 같이 OpenGL가속이 되는 X서버를 통해서 프로그램을 실행하려 하는 것 같습니다.
창관리자는 Xgl 위에서 실행되고 있으므로, GL응용프로그램의 존재를 알 수가 없습니다. 따라서 Alt+tab으로 해당 프로그램으로 전환이 불가능합니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
이 부분 확실하게
이 부분 확실하게 보려면
같은 명령을 주어보면 현재의 Xgl 구현이 어떤식인지 감을 잡을 수 있을 거라고 생각합니다.
지금의 Xgl은 Xnest나 Xephyr 같은 Nested X서버라고 보아도 될거 같습니다. 실제도 Xorg서버가 뜬 상태에서 Xephyr 처럼 사용하는 것이 가능했습니다.
이렇게 구현된 이유는 현재의 OpenGL 드라이버가 Xorg에 의존하기 때문이며, Xgl은 초기 GL셋업과정에서만 Xorg에 의존할 뿐이지, 실제로 화면을 그릴 때에는 Direct Rendering방식을 씁니다. 다만 현재 구현으로는 ganadist님 말처럼 Xgl위에서 돌아가는 프로그램들은 Direct Rendering을 쓰지 못하고 있죠.
전에 Xgl 사용할 적에 몇몇 Xgl과 충돌하거나 퍼포먼스 문제가 생기는 프로그램들을 아쉬운 대로 이런 방법으로 썼었습니다.
댓글 달기