2016-08-16 35 views
0

我有下面的代碼開始一個框架:段錯誤的glBlendFunc

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

沒有最後一行,程序運行(但顯然不混合),但它也出現segfaults。 GDB是不是一個很大的幫助,因爲它看起來像堆損壞,和段錯誤後,運行:

set $pc = *(void**)$rsp 
set $rsp = $rsp+8 

指向函數的最後一幀的結束括號。

我有一個小懷疑,這是一個驅動程序中的錯誤,但無法找到他們的跟蹤器的錯誤報告。驅動程序是在Ubuntu上運行的flgrx-updates。 GLXInfo給出:

OpenGL vendor string: Advanced Micro Devices, Inc. 
OpenGL renderer string: AMD Radeon R9 200 Series 
OpenGL core profile version string: 4.3.13399 Core Profile Context 15.201.1151 
OpenGL core profile shading language version string: 4.40 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
+0

你看過'glGetError()'在調用'glEnable(GL_BLEND)'後會返回什麼?您是否嘗試過其他混合模式'glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_SRC_ALPHA)'? –

+0

你有最新版本的視頻驅動程序嗎? – Unick

+0

@AntonMalyshev在啓用後,'glGetError()'返回'0'。更改混合模式仍然會導致崩潰 –

回答

0

好吧,我還是真的不知道爲什麼這個修復它 - 但賽格故障是由我改變目標文件的鏈接命令指定的順序引起的。但是指定加載函數指針的目標文件在之前加載OpenGL ,那麼使用這些函數的文件將使一切正常工作。

+0

這實際上聽起來像你用你的GL加載器犯了一些錯誤。如果之前放置了該文件,則在解析以下obj文件的符號時不會使用該文件。如果在此之後放置了-lGL,則將直接鏈接到GL符號,而不是裝入器。所以這聽起來這個代碼在加載器被初始化之前被調用,或者加載器在加載指針時有一些問題。 – derhass

+0

@derhass加載程序肯定會初始化函數指針(它們看起來都是有效的),有沒有可能智能鏈接將符號搞砸了? –