2013-10-16 193 views
0

我試圖在沒有專用圖形卡的計算機上配置幀緩衝區。只有檯面GL。glXChooseFBConfig返回NULL

我試過多個FB配置,但我似乎無法得到非NULL返回。相同的代碼工作的另一臺計算機與NVIDIA驅動程序上..

OpenGL vendor string: Tungsten Graphics Inc 
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Desktop 
OpenGL version string: 3.0 Mesa 8.0.4 
OpenGL shading language version string: 1.30 

檯面例子另一臺計算機上的工作也沒有在同一glXFBConfig線。

這裏就像我說的,我試着用不同的配置,如代碼

int fbAttribs[] = { 
     None 
    }; 

    int numberOfFramebufferConfigurations = 0; 
    GLXFBConfig* fbConfigs = glXChooseFBConfig(self->display, DefaultScreen(self->display), fbAttribs, &numberOfFramebufferConfigurations); 

的相關部分:

int fbAttribs[NUM_FB_CONFIGS][100] = { 
     { 
     /* Single buffered, with depth buffer */ 
     GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, 
     GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     GLX_DEPTH_SIZE, 1, 
     GLX_DOUBLEBUFFER, 0, 
     GLX_STENCIL_SIZE, 0, 
     None 
     }, 
     { 
     /* Double buffered, with depth buffer */ 
     GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, 
     GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     GLX_DEPTH_SIZE, 1, 
     GLX_DOUBLEBUFFER, 1, 
     GLX_STENCIL_SIZE, 0, 
     None 
     }, 
     { 
     /* Single buffered, without depth buffer */ 
     GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, 
     GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     GLX_DEPTH_SIZE, 0, 
     GLX_DOUBLEBUFFER, 0, 
     GLX_STENCIL_SIZE, 0, 
     None 
     }, 
     { 
     /* Double buffered, without depth buffer */ 
     GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, 
       GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, 
     GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     GLX_DEPTH_SIZE, 0, 
     GLX_DOUBLEBUFFER, 1, 
     GLX_STENCIL_SIZE, 0, 
     None 
     } 
    }; 
    GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     GLX_DEPTH_SIZE, 0, 
     GLX_DOUBLEBUFFER, 1, 
     GLX_STENCIL_SIZE, 0, 
     None 
     } 
    }; 

回答

0

用解決方案回答我自己的問題。

這實際上最終成爲不支持所需擴展的OpenGL上下文。 在這種情況下,我是ssh'ing(帶-X)進入機器並運行執行所有OpenGL計算的二進制文件。在這種情況下,可以使用主機或客戶端的OpenGL,具體取決於$ DISPLAY變量。將DISPLAY變量設置爲:0.0意味着使用主機的OpenGL解決問題。

+0

我用'export DISPLAY =:0'將'DISPLAY'變量設置爲':0'。它以前被設置爲「:1」。我也在ssh'ing機器,雖然我沒有提供'-X'選項。我是不是該?無論如何,'glXChooseFBConfig'仍然失敗。 – richizy

1

你檢查,即GLX實際可用?同樣爲了使glXChooseFBConfig工作,服務器必須支持Render擴展名。近來廣泛支持GLXRender。但他們可能不會,所以你必須檢查。使用glXQueryExtension檢查GLX和XRenderQueryExtension檢查Render