位標誌
位標誌是一組變數,通常是簡單的數值,可用於啟用或停用方法或其他程式碼結構的特定用途或功能。它們可以快速高效地完成此操作,因為它們在位級別進行操作。同一組中相關的標誌通常被賦予互補值,代表單個值(例如,十六進位制)中不同的位位置,因此多個標誌設定可以由單個值表示。
例如,在 WebGPU API 中,使用 GPUDevice.createBuffer() 方法建立 GPUBuffer 物件例項。呼叫此方法時,您在描述符中定義一個 usage 屬性,其中包含一個或多個標誌,這些標誌啟用該緩衝區的不同允許用途。
js
const descriptor = {
usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE,
};
這些值在同一個名稱空間中定義,每個都具有十六進位制值
| 用途標誌 | 十六進位制表示 | 十進位制等效值 |
|---|---|---|
GPUBufferUsage.MAP_READ |
0x0001 | 1 |
GPUBufferUsage.MAP_WRITE |
0x0002 | 2 |
GPUBufferUsage.COPY_SRC |
0x0004 | 4 |
GPUBufferUsage.COPY_DST |
0x0008 | 8 |
GPUBufferUsage.INDEX |
0x0010 | 16 |
GPUBufferUsage.VERTEX |
0x0020 | 32 |
GPUBufferUsage.UNIFORM |
0x0040 | 64 |
GPUBufferUsage.STORAGE |
0x0080 | 128 |
GPUBufferUsage.INDIRECT |
0x0100 | 256 |
GPUBufferUsage.QUERY_RESOLVE |
0x0200 | 512 |
當您查詢 GPUBuffer.usage 屬性時,會返回一個十進位制數字,它是不同用途標誌的不同十進位制值的總和。回到上面的示例,查詢使用前面指定的用途建立的 GPUBuffer 的 GPUBuffer.usage 將返回以下內容
GPUBufferUsage.COPY_SRC的十進位制等效值,4- 加上
GPUBufferUsage.MAP_WRITE的十進位制等效值,2 - 等於 6。
由於為不同標誌選擇的值,每個值的組合都是唯一的,因此程式可以一目瞭然地從單個值中判斷哪些標誌已設定。此外,您可以使用位與運算子輕鬆測試組合值中設定了哪些標誌
js
if (buffer.usage & GPUBufferUsage.MAP_WRITE) {
// Buffer has MAP_WRITE usage
}