Opengl4.5 中文手冊—B
索引
A B C D E F G
H I J K L M N
O P Q R S T
U V W X Y Z
B
glBeginConditionalRender 3.0
開始條件渲染
GLuint queryid
GLenu mode: GL_QUERY_WAIT|GL_QUERY_NOWAIT|
GL_QUERY_BY_REGION_WAIT|GL_QUERY_REGION_NOWAIT
根據遮擋查詢結果進行繪制,_WAIT會等待查詢執行完畢,再根據結果判斷;_NOWAIT版本在Query未執行完時會直接繪制
glBeginQuery 2.0
開啟遮擋查詢
GLenum target:
GL_SAMPLES_PASSED, 通過的采樣個數
GL_ANY_SAMPLES_PASSED, 是否存在通過的采樣 3.3+
GL_ANY_SAMPLES_PASSED_CONSERVATIVE, 非精確的結果(保守),速度可能快 4.3+
GL_PRIMITIVES_GENERATED, vertex shader或者geometry shader emit頂點數
GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, 查詢生成到反饋查詢緩沖區中的頂點數
GL_TIME_ELAPSED
GLuint queryid
glEndQuery(GLenum target ):與begin相同
結束查詢
可以使用glGetQuery、glGetQueryObject獲取查詢結果
glBeginQueryIndexed 4.0
4啟用索引查詢,用於geometryshader
GLenum target
GLuint index 和BeginQuery區別在於使用geometryshader並在在target為GL_PRIMITIVES_GENERATED\ GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN時,可指定對應的stream索引
GLuint queryid
glEndQueryIndexed結束查詢
glBeginTransformFeedback
3.0+ 開啟反饋查詢
GLenum mode: GL_POINTS\GL_LINES\GL_TRIANGLES
用於將vertex或者geometry shader結果輸出到通過glBindBufferBase、glBindBufferRange綁定的GL_TRANSFORM_FEEDBACK_BUFFER緩沖區,不是通過glBindBuffer綁定(無索引參數,只能綁定到非數組類型的目標緩沖區:GL_ATOMIC_COUNTER_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER or GL_SHADER_STORAGE_BUFFER). P458
記錄的頂點程序輸出可在程序鏈接前通過glTransformFeedbackVaryings設置
glBindAttribLocation 2.0
設置頂點屬性索引,一般在shader中用layout(location=index) 設置,設置的索引在linkprogram之後生效。
可以將多個名稱綁定到同一索引,實現別名
GLuint program,
GLuint index,
const GLchar *name
綁定片段程序輸出使用glBindFragDataLocation
glBindBuffer 2.0
關聯buffer
GLenum target:
GL_ARRAY_BUFFER 頂點屬性,用於glVertexAttribPointer
GL_ELEMENT_ARRAY_BUFFER 頂點索引,用於glDrawElements等索引繪制方法
GL_COPY_READ_BUFFER Buffer copy source
GL_COPY_WRITE_BUFFER Buffer copy destination
GL_PIXEL_PACK_BUFFER 用於從紋理或幀緩沖區對象中讀取像素數據 glGetCompressedTexImage, glGetTexImage, and glReadPixels.
GL_PIXEL_UNPACK_BUFFER 作為生成紋理數據源,用於glTexImage2D, glTexImage3D, glTexSubImage1D, glTexSubImage2D等
GL_TEXTURE_BUFFER Texture data buffer
GL_QUERY_BUFFER 用於存儲查詢結果glGetQuery
GL_DISPATCH_INDIRECT_BUFFER 用於glDispatchComputeIndirect
GL_DRAW_INDIRECT_BUFFER 用於glDrawArraysIndirect and glDrawElementsIndirect
以下四個類型含多個綁定點,需要使用glBindBufferBase 或glBindBufferRange綁定
GL_ATOMIC_COUNTER_BUFFER Atomic counter storage
GL_SHADER_STORAGE_BUFFER Read-write storage for shaders
GL_TRANSFORM_FEEDBACK_BUFFER Transform feedback buffer
GL_UNIFORM_BUFFER
GLuint bufferID
glBindBufferBase
3.0+ 綁定索引的數組類型的緩沖區,也可綁定非索引類型緩沖區
索引緩沖區包括:GL_ATOMIC_COUNTER_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER
, GL_UNIFORM_BUFFER or GL_SHADER_STORAGE_BUFFER
GLenum target,
GLuint index, 相比glBindBuffer增加了此參數,指定對應綁定點索引,
GLuint buffer
glBindBufferRange
3.0+綁定索引的緩沖區中可用數據範圍,也可用於綁定非索引類型緩沖區
索引緩沖區包括:GL_ATOMIC_COUNTER_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER
, GL_UNIFORM_BUFFER or GL_SHADER_STORAGE_BUFFER
相比glBindBufferBase增加了offset和size
GLenum target,
GLuint index,
GLuint buffer,
GLintptr offset,
GLsizeiptr size
glBindFramebuffer
關聯幀緩沖區
3.0+
GLenum target, :GL_DRAW_FRAMEBUFFER 渲染、GL_READ_FRAMEBUFFER讀取、GL_FRAMEBUFFER 渲染和讀取
GLuint framebuffer
關聯到GL_DRAW_FRAMEBUFFER的Framebuffer的可通過glFramebufferRenderbuffer掛接渲染緩沖區、以及通過glFramebufferTexture2D渲染到紋理。
glBindFragDataLocation 3.0
設置片段程序輸出對應的顏色緩沖區索引
GLuint program,
GLuint colorNumber, [0, GL_MAX_DRAW_BUFFERS)
const char * name 變量名稱
如果片段程序使用layout (location = colorNumber)指定了索引,則此方法調用無效
不可以將多個變量輸出到同一索引
主要用於多渲染目標繪制,參考glDrawBuffers
glBindFragDataLocationIndexed 3.2
同glBindFragDataLocation, 增加了index,分別為0/1表示對應顏色混合等式的第一個或第二個輸入項
GLuint program,
GLuint colorNumber,
GLuint index,
const char *name
glBindImageTexture
4.2+ 綁定紋理到image unit用於後續的shader讀寫
GLuint unit, 綁定到的image unit索引
GLuint texture,
GLint level, 使用的紋理level
GLboolean layered,使用紋理數組或者立方體紋理時,是否按層堆放。true 使用所有, false 僅使用layer指定的層
GLint layer, layerder=false時指定使用的層
GLenum access, GL_READ_ONLY, GL_WRITE_ONLY, or GL_READ_WRITE 指定讀寫權限
GLenum format 數據輸出格式,應與紋理的innerformat同大小並屬於同一類。
glBindImageTextures
4.4+ 批量綁定紋理到image unit
GLuint first, 起始iamge unit索引
GLsizei count,
const GLuint *textures
采用layered方式綁定level 0,格式與紋理格式相同
glBindProgramPipeline
4.1+ 綁定管線對象到當前上下文
GLuint pipeline
如果glUseProgram 設置了當前程序,則使用glUseProgram的設置,glUseProgram優先級較高。
glBindRenderbuffer
3.0+ 綁定渲染緩沖區
GLenum target, GL_RENDERBUFFER 僅此一個綁定點,設計多余
GLuint renderbuffer
綁定後可通過glRenderbufferStorage初始化格式和大小,並關聯到Framebuffer用於後續渲染
glBindSampler
3.3+ 將采樣器關聯到紋理單元
GLuint unit
GLuint sampler
采樣器設置優先於紋理的單元的紋理狀態設置,未設置采樣器才會采用紋理狀態設置
一個采樣器可用於多個紋理單元
glBindSamplers
4.4+ 批量設置多個采樣器
GLuint first, 起始紋理單元索引
GLsizei count,
const GLuint *samplers
glBindTexture
2.0+ 綁定紋理
GLenum target: GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_BUFFER, GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY
GLuint texture
紋理默認僅當前渲染上下文可見。
glBindTextures
4.4+ 批量綁定紋理
GLuint first, 起始紋理單元
GLsizei count,
const GLuint *textures
glBindTextureUnit
4.5+ 蔣紋理直接綁定到紋理單元
GLuint unit,
GLuint texture
相當於glActiveTexture +glBindTexture, 可配合glBindSampler
glBindTransformFeedback
4.0+ 綁定變換反饋對象
GLenum target, GL_TRANSFORM_FEEDBACK
GLuint id
glBindVertexArray
3.0+ 綁定頂點數組對象VAO
GLuint arrayID
glBindVertexBuffer
4.3+ 綁定頂點buffer ,相當於glBindBuffer+glVertexAttribPointer,但簡單多了,以前設計太累贅
GLuint bindingindex, 綁定索引
GLuint buffer,
GLintptr offset,
GLintptr stride
4.5+ glVertexArrayVertexBuffer 直接綁定到VAO
glBindVertexBuffers
4.4+ 批量綁定多個頂點buffer
GLuint firstIndex,
GLsizei count,
const GLuint *buffers,
const GLuintptr *offsets,
const GLsizei *strides
glBlendColor
2.0+ 設置混合顏色,用於glBlendFunc:: GL_CONSTANT_COLOR
GLfloat red,
GLfloat green,
GLfloat blue,
GLfloat alpha
glBlendEquation
2.0+ 設置源、目標混合方程式
GLenum mode GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MIN, GL_MAX 加、減、目標-源,最小、最大
glBlendEquationi ( GLuint buf, GLenum mode) 4.0+ 依據索引設置指定drawbuffer
glBlendEquationSeparate
2.0+ 對rgb和alpha設置不同的方程式
GLenum modeRGB,
GLenum modeAlpha
glBlendFunc
2.0+ 設置源和目標混合因子
GLenum src, dst :
GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA. GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, and GL_ONE_MINUS_CONSTANT_ALPHA
GL_CONSTANT_COLOR : 采用glBlendColor設定的值
GL_SRC_ALPHA_SATURATE :采用srcAlpha和1-dstAlpha中較小的一個
默認源為GL_ONE, 目標為 GL_ZERO。混合默認無效,啟用需要使用glEnable(GL_BLEND)
常用的透明為:(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glBlendFunc設置所有drawbuffer,設置單個drawbuffer使用glBlendFunci
glBlendFuncSeparate
與glBlendFunc類似,為rgb和alpha設置不同的混合因子
glBlitFramebuffer 3.0
3.0+ 幀緩沖區之間拷貝數據,比如幀緩沖區輸出結果拷貝的窗口緩沖區顯示
GLint srcX0,
GLint srcY0,
GLint srcX1,
GLint srcY1,
GLint dstX0,
GLint dstY0,
GLint dstX1,
GLint dstY1,
GLbitfield mask 顏色、深度、模板標記
GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT GL_STENCIL_BUFFER_BIT
GLenum filter 過濾方式GL_NEAREST or GL_LINEAR, 深度或模板只能使用GL_NEAREST
將綁定到GL_READ_FRAMEBUFFER的FrameBuffer數據復制到GL_DRAW_FRAMEBUFFER綁定的幀緩沖區。可以為0,即窗口系統緩沖區。
拷貝範圍為[srcx0, srcy0]-(srcx1,srcy1),即左下包含,右上不包含
glBlitNamedFramebuffer 4.5+ 根據framebufferID直接復制數據
glBufferData 2.0
初始化Buffer數據
GLenum target,
GLsizeiptr size, 大小
const GLvoid * data, 數據地址,可為NULL,後續可通過glBufferSubData, glMapBuffer
glReadPixels等方式生成數據
GLenum usage: GL_STREAM/STATIC/DYNAMIC_DRAW/READ/COPY
STATIC 一次創建,經常使用
DYMAMIC 多次創建,多次使用
STREAM 一次創建,幾次使用
DRAW 寫數據到GPU
READ 從GPU中讀取數據
COPY GPU讀寫數據
glNamedBufferData 4.5+ 直接初始化buffer數據
GLuint buffer,
GLsizei size,
const void *data,
GLenum usage
glBufferStorage 4.4
初始化buffer數據存儲,參數與glBufferData僅最後標記不同,相比glBufferData, 標誌位多了COHERENT和PERSISTENT以便協調cpu gpu並發
GLenum target,
GLsizeiptr size,
const GLvoid * data,
GLbitfield flags:
GL_DYNAMIC_STORAGE_BIT 數據可通過glBufferSubData動態更新,否則cpu在初始化後不能再更改數據。對於gpu, 不論設不設置都可以通過glCopyBufferSubData and glClearBufferSubData修改其數據
GL_MAP_READ_BIT cpu可以通過map讀取其數據
GL_MAP_WRITE_BIT cpu可以通過map更新數據
GL_MAP_PERSISTENT_BIT map期間gpu可以讀寫buffer(不需要等待)
GL_MAP_COHERENT_BIT 使用glMapBufferRange期間,保持cpu與gpu數據一致。即cpu寫對gpu立即可見。Gpu寫在調用glFinish或者glFenceSync(GL_SYNC_GPU_ COMMANDS_COMPLETE,0)後對cpu可見。如果不指定此標記,需要先調用glMemoryBarrier, 數據修改才對gpu可見;對於cpu需要調用glMemoryBarrier之後再調用glFenceSync或者glFinish,gpu對數據的修改才可見
GL_CLIENT_STORAGE_BIT 使用客戶端內存存儲(具體存儲位置依據實現)
指定GL_MAP_COHERENT_BIT需要同時指定GL_MAP_PERSISTENT_BIT
glNamedBufferStorage 4.5+ 直接設置buffer數據存儲
glBufferSubData
2.0+ 替換部分數據
GLenum target,
GLintptr offset,
GLsizeiptr size,
const GLvoid * data
替換全部數據使用glBufferSubData優於glBufferData,可避免重新分配內存。
可以考慮使用多個buffer,避免在更新時堵塞渲染管線
glNamedBufferSubData 4.5+ 直接更新buffer
Opengl4.5 中文手冊—B