æ å¿ä½
æ å¿ä½æ¯ä¸ç»åéï¼é常æ¯ç®åçæ°å¼ï¼ï¼å¯ä»¥ç¨äºå¯ç¨æç¦ç¨æ¹æ³æå ¶ä»ä»£ç ç»æçç¹å®ç¨éæç¹æ§ãç±äºå®ä»¬å¨ä½çº§å«ä¸è¿è¡ï¼å æ¤å¯ä»¥å¿«éææå°å®ç°è¿ä¸ç¹ãåä¸ç»ä¸çç¸å ³æ å¿é常被èµäºäºè¡¥å¼ï¼æ¯ä¸ªå¼é½è¡¨ç¤ºå个å¼ï¼ä¾å¦åå è¿å¶ï¼ä¸ä¸åä½çä½ç½®ï¼ä»¥ä¾¿ç¨å个å¼è¡¨ç¤ºå¤ä¸ªæ å¿ç设置ã
ä¾å¦ï¼å¨ WebGPU API ä¸ï¼å¯ä»¥ä½¿ç¨ GPUDevice.createBuffer() æ¹æ³å建 GPUBuffer 对象å®ä¾ãå¨è°ç¨æ¤æ¹æ³æ¶ï¼éè¦å¨æè¿°ç¬¦ä¸å®ä¹ usage 屿§ï¼å
¶ä¸å
å«ä¸ä¸ªæå¤ä¸ªæ å¿ï¼å¯ç¨è¯¥ç¼å²åºä¸åçå
许ç¨éã
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ã
ç±äºä¸ºä¸åæ å¿éæ©ç弿¯å¯ä¸çï¼å æ¤æ¯ä¸ªå¼ç»å齿¯å¯ä¸çï¼å æ¤ç¨åºå¯ä»¥ä¸ç®äºç¶å°ä»å个å¼ä¸ç¥é设置äºåªäºæ å¿ãæ¤å¤ï¼ä½ ä¹å¯ä»¥ä½¿ç¨æä½ä¸è¿ç®ç¬¦è½»æ¾æµè¯ç»åå¼ä¸è®¾ç½®äºåªäºæ å¿ï¼
if (buffer.usage & GPUBufferUsage.MAP_WRITE) {
// Buffer æ MAP_WRITE ç¨æ³
}
åè§
- æ å¿ä½æ¯ä¼é çï¼ä¸ºä»ä¹ï¼
- ç»´åºç¾ç§ä¸ç使ä½