我試圖在遠程計算羣集上運行一個opengl應用程序。我正在使用osmesa,因爲我打算執行離屏軟件渲染(無x11轉發等)。我想使用glew(讓生活處理着色器和其他與擴展相關的調用更容易),並且我似乎已經建立並鏈接了mesa和glew。創建osmesa(屏幕外檯面)上下文後glewInit()崩潰(segfault)
當我調用mesa-create-context時,glewinit會給出OPENGL版本不可用的輸出,這可能意味着上下文尚未創建。當我調用glGetString(GL_EXTENSIONS)我沒有得到任何輸出,這證實了這一點。這也表明,glew自行工作正常。 (其他glew命令像glew版本等也可以)。
現在,當我(如下圖所示),添加mesa-make-context-current函數,glewinit崩潰與段錯誤。現在運行glGetString(GL_EXTENSIONS)給了我一個擴展列表,但是(這意味着上下文創建是成功的!)
我花了幾個小時試圖弄清楚,試過修補,但沒有任何工作。將不勝感激任何幫助。也許你們有些人曾經經歷過類似的事情?再次感謝!
int Height = 1; int Width = 1;
OSMesaContext ctx; void *buffer;
ctx = OSMesaCreateContext(OSMESA_RGBA, NULL);
buffer = malloc(Width * Height * 4 * sizeof(GLfloat));
if (!OSMesaMakeCurrent(ctx, buffer, GL_UNSIGNED_BYTE, Width, Height)) {
printf("OSMesaMakeCurrent failed!\n");
return 0;
}
-- glewinit() crashes after this.
只是添加,osmesa和glew實際上最初並沒有編譯。由於glew在最後一行中未定義GLAPI,並且由於osmesa不再包含gl.h,所以GLAPI保持未定義狀態,並在osmesa.h(119)中導致錯誤。我通過向GLAPI添加一個外部函數來解決這個問題,但不確定這是否與此相關。
「extern to GLAPI」? 'GLAPI'通常是一個定義庫鏈接/調用約定的宏(例如,用於DLL鏈接的'__declspec(dllimport)),而不是您可以鏈接到的實際符號。 –
對不起,我的意思是,#include 「GL/glew.h」 #define GLAPI extern #include「GL/osmesa.h」 我沒有對glew.h文件的寫入權限,所以無法評論從那裏取出未發現的GLAPI位。 – ishan