1. 程式人生 > >Opengl4.5 中文手冊—B

Opengl4.5 中文手冊—B

linear etc lines 才會 遮擋 tis 並發 ble var

索引

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