2013-04-04 63 views
1

我正在爲Linux手動創建OpenGL 4.2上下文。瞭解glXCreateContextAttribsARB屬性設置

創建上下文的陣列屬性是這樣的:

int context_attribs[] = { 
     GLX_CONTEXT_MAJOR_VERSION_ARB, 4, 
     GLX_CONTEXT_MINOR_VERSION_ARB, 2, 
     GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB, 
     GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 
     None 
    }; 

然後,我將它傳遞到glXCreateContextAttribsARB()。該上下文中創建的所有權利,但我有一個關於屬性標誌一對夫婦的問題。 例如,基於該文檔GLX_CONTEXT_FLAGS_ARB我有兩個選擇:

GLX_CONTEXT_DEBUG_BIT_ARB  0x0001 
GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 

如果我選擇的第一個,它的意思是OpenGL的在調試模式下運行,如果是的話,如果我使用這個標誌的第二個選項?這是否意味着我無法使用固定功能? 如果是,那麼如何設置「非調試」上下文,但在兼容性配置文件模式?

回答

2

所有標誌都是正交的。他們是位標記;你可以單獨設置它們,或者根本不設置它們。

GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB, 

這意味着要創建一個調試上下文。

GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB | GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB, 

這意味着創建也使用robust access(我用這個例子,而不是你的向前兼容性之一,因爲你應該從來不使用向前兼容)調試環境。他們是位標誌;你按位或他們在一起。

GLX_CONTEXT_FLAGS_ARB, 0, 

這意味着沒有標誌。所以它不會是一個調試上下文,它不會使用健壯的訪問等。這可能是你正在尋找的。

此外,您可以選擇不通過標誌。

+0

你可以花費在「健壯的訪問」的使用嗎?我閱讀文檔,但並沒有真正理解爲什麼我會需要它。或者我應該提交這是另一個問題? ;) – 2013-04-04 10:52:45

+0

@MichaelIV:最近才引入了可靠訪問,以幫助開發OpenGL框架或後端執行不受信任的代碼,例如瀏覽器中的WebGL。在強健的訪問方法之前,某些OpenGL方法可用於泄漏其他進程的信息或用於代碼注入。啓用強大的功能後,會添加一些額外的完整性檢查,並且還沒有未初始化的緩衝區。有關詳細信息,請參閱http://www.opengl.org/registry/specs/ARB/robustness.txt – datenwolf 2013-04-04 11:11:56