내가 직면하고있는 문제는 단일 스레드에서 기본 기본 요소를 렌더링하는 glx 기반 응용 프로그램을 가지고 있다는 것입니다. 두 화면 사이에서 XWindow를 움직일 수 있고 렌더링 루프가 계속 진행됩니다. 그러나 응용 프로그램의 일부에 스레드가 있으면 OpenGL 호출을하지 않거나 다른 스레드에서는 XWindow를 누르지 만 주 스레드는 한 화면에서 다른 화면으로 XWindow를 이동하면 렌더링되는 그래픽이 손실됩니다.다중 모니터에서 GLX 사용 RHEL - OpenGL, XLib 및 다중 모니터 (스레드 포함)
내가 처음 작성한 함수 호출은 XInitThreads이므로 X11은 스레드로부터 안전해야한다는 것을 알고 있습니다. 내가 말했듯이 한 스레드에서 프리미티브를 그릴 때 작동하지만 하나 이상의 스레드를 추가 할 때는 작동하지 않는다. 스레드는 내가 소스에 액세스 할 수없는 라이브러리에 있습니다. 나는 X11을 사용하여 코드의 윈도우 부분을 생성하라는 요청을 받고있다.
이 문제를 해결하려면 무엇을해야합니까?
또한 모든 glcall이 내가 라이브러리 내부에서 호출하는 스레드에서 hapen된다는 것을 알아 냈습니다.
업데이트는
[[email protected] SampleApp]$ cat /etc/X11/xorg.conf && echo "--------" && xrandr --verbose && echo "-------" && glxinfo && echo "-------" && xdpyinfo
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 295.20 ([email protected]) Mon Feb 6 22:13:16 PST 2012
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 295.20 ([email protected]) Mon Feb 6 22:13:40 PST 2012
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "1"
EndSection
Section "Files"
FontPath "/usr/share/fonts/default/Type1"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from data in "/etc/sysconfig/keyboard"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "us"
Option "XkbModel" "pc105"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "DELL P190S"
HorizSync 30.0 - 81.0
VertRefresh 56.0 - 76.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Unknown"
ModelName "DELL P190S"
HorizSync 30.0 - 81.0
VertRefresh 56.0 - 76.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Unknown"
ModelName "DELL 1908FP"
HorizSync 31.0 - 83.0
VertRefresh 56.0 - 76.0
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Quadro 4000"
BusID "PCI:15:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Quadro 4000"
BusID "PCI:15:0:0"
Screen 1
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "0"
Option "TwinViewXineramaInfoOrder" "DFP-0"
Option "metamodes" "DFP-0: nvidia-auto-select +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
DefaultDepth 24
Option "TwinView" "0"
Option "metamodes" "DFP-2: nvidia-auto-select +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection
--------
Xlib: extension "RANDR" missing on display ":0.0".
RandR extension missing
[[email protected] SampleApp]$
간단히 할 수있는 유일한 곳은 swapbuffers를 호출 한 후입니다. 나는 아무 소용이 없었다. 나는 장치와 glxMakeCurrent와 glxSwapBuffers 함수의 생성을 제어한다. 그리기 전에 라이브러리에 전화를 걸기 전에 이것들에 대한 호출을 무승부로합니다. 또한 끌기가 불릴 때 나는 당신이 끄는 전화에 모든 gl 호출이다는 것을 약속되었다. 그리는 내 전화는 주요 실에 있습니다. –
XWindow를 화면에서 화면으로 드래그하면 두 개의 X (#CPUs) + 1 스레드 모두 pthread_cond_wait에 있습니다. –
@MatthewHoggan : 시스템 설정은 무엇입니까 (사용 된 GPU, xorg.conf [.d] 출력의 xrandr --verbose','glxinfo','xdpyinfo')? – datenwolf