2017-10-21 117 views
1

在OpenGL中的一般方法是結合一個命名緩衝對象(或頂點數組對象,幀緩衝器,...),調用當前綁定對象的某些操作,然後結合某種「默認」的對象:爲什麼綁定OpenGL緩衝區對象?

glBindBufferObject(GL_ARRAY_BUFFER, bufferObjectName) 
glBufferData(GL_ARRAY_BUFFER, data, GL_STATIC_DRAW) 
glBindBufferObject(GL_ARRAY_BUFFER, 0) 

(KTlin的LWJGL)

我剛剛發現有很多函數的「named」版本。從上面的例子將變得像

glNamedBufferData(bufferObjectName, data, GL_STATIC_DRAW) 

這是更適合在面向對象的上下文。

那麼爲什麼要用第一個例子中的東西呢?我遇到的每個教程都使用了第一種方法,那麼「命名」方法中是否存在性能下降或類似缺點?

+2

「命名」函數僅適用於較新版本的OpenGL,如4.5。他們以前不存在。要使用什麼取決於您是否要確保與舊硬件的兼容性。 – Rabbid76

回答

3

命名函數是在OpenGL 4.5中引入的ARB_direct_state_access擴展的一部分。在此之前,只有正常的方法存在。

使用舊版本的主要原因是針對OpenGL 4.5之前的硬件。大多數教程也是針對較早版本的OpenGL編寫的。

+0

已經是4.6版本的核心。 – Hitokage

+1

@Hitokage:你究竟是什麼意思?這是自4.5以來的核心。 – BDL

+0

對不起,我的錯。 – Hitokage