我正在學習OpenGL與Qt5重寫一些遺留代碼。他們使用glSecondaryColorPointerEXT()。在檢查了當前在常用視頻卡中對OpenGL的支持後,我選擇了Qt5的類QOpenGLFunctions_3_2_Core來訪問OpenGL函數。glSecondaryColorPointerEXT替換使用Qt5 OpenGL 3.3
是否有OpenGL 3.2版本或此函數的替換方法?
我正在學習OpenGL與Qt5重寫一些遺留代碼。他們使用glSecondaryColorPointerEXT()。在檢查了當前在常用視頻卡中對OpenGL的支持後,我選擇了Qt5的類QOpenGLFunctions_3_2_Core來訪問OpenGL函數。glSecondaryColorPointerEXT替換使用Qt5 OpenGL 3.3
是否有OpenGL 3.2版本或此函數的替換方法?
在OpenGL 3.2中,您應該使用着色器,此外您應該避免使用舊版功能,如gl_SecondaryColor
。在基於着色器的引擎中適當替換二級顏色只是一個附加的通用頂點屬性。我解釋了一個與OpenGL ES 2.0相關的very similar question,我的回答可能有一些幫助。
簡而言之,glVertexPointer (...)
,glColorPointer (...)
,glSecondaryColorPointer{EXT} (...)
在OpenGL 3.0中都被棄用。在3.2核心環境中,你根本無法使用它們。因此,您需要了解着色器和glVertexAttribPointer (...)
。
使用「主」和「次要」頂點顏色核心GL 3.2會是這個樣子頂點着色器:
#version 150 core
uniform mat4 mvp;
in vec4 vtx_pos;
in vec4 vtx_color1;
in vec4 vtx_color2;
out vec4 color;
void main (void) {
gl_Position = mvp * vtx_pos;
color = vtx_color1 * vtx_color2; // It is up to you to decide what to do
// with the primary and secondary
// colors, this is just for show...
}
你應該使用glVertexAttribPointer (...)
使用數據提供給vtx_pos,vtx_color1和vtx_color2屬性位置從GLSL頂點着色器查詢(鏈接後)。所有這些完全消除了對glSecondaryColorPointerEXT (...)
的需求。
這意味着,不是翻譯遺留代碼和修復一些遺留功能,我必須重寫整個事情。我選擇了3.2內核,因爲大多數視頻卡都支持它,但不支持第4版。不是驚心動魄的回答:( – Jay
@Jay:不要使用3.2內核然後:)您可以從3.2兼容性配置文件訪問大多數3.2功能,事實上,您可以如果你這樣做,不需要使用着色器。這絕對不是處理現代OpenGL的最佳方式,但如果您正在處理遺留代碼庫,這可能是您唯一的過渡選項。這是兼容性配置文件的設計目的,簡化了升級過程。 –
@Jay:我並不是Qt的專家,但它只花了我幾秒鐘來找到['QOpenGLFunctions_3_2_Compatibility'](http://qt-project.org/doc/qt-5.1/qtgui/qopenglfunctions-3- 2-compatibility.html)。這毫無疑問是你想要使用的。如果你使用這個,那麼你可以在沒有EXT後綴的情況下訪問'glSecondaryColorPointer(...)',因爲它是OpenGL 3.2兼容性的一部分,不需要擴展。 –