Opengl4.5 中文手冊—B


索引

      B     C      D     E     F     G  

      I       L     M     N

      P     Q      R     S     T   

U       V     W 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM