Metal框架詳細解析(四十四) —— Metal編程指南之緩沖和紋理操作:Blit命令編碼器(九)

版本記錄

版本號 時間
V1.0 2018.11.11 星期日

前言

很多做視頻和圖像的,相信對這個框架都不是很陌生,它渲染高級3D圖形,并使用GPU執(zhí)行數(shù)據(jù)并行計算。接下來的幾篇我們就詳細的解析這個框架。感興趣的看下面幾篇文章。
1. Metal框架詳細解析(一)—— 基本概覽
2. Metal框架詳細解析(二) —— 器件和命令(一)
3. Metal框架詳細解析(三) —— 渲染簡單的2D三角形(一)
4. Metal框架詳細解析(四) —— 關(guān)于GPU Family 4(一)
5. Metal框架詳細解析(五) —— 關(guān)于GPU Family 4之關(guān)于Imageblocks(二)
6. Metal框架詳細解析(六) —— 關(guān)于GPU Family 4之關(guān)于Tile Shading(三)
7. Metal框架詳細解析(七) —— 關(guān)于GPU Family 4之關(guān)于光柵順序組(四)
8. Metal框架詳細解析(八) —— 關(guān)于GPU Family 4之關(guān)于增強的MSAA和Imageblock采樣覆蓋控制(五)
9. Metal框架詳細解析(九) —— 關(guān)于GPU Family 4之關(guān)于線程組共享(六)
10. Metal框架詳細解析(十) —— 基本組件(一)
11. Metal框架詳細解析(十一) —— 基本組件之器件選擇 - 圖形渲染的器件選擇(二)
12. Metal框架詳細解析(十二) —— 基本組件之器件選擇 - 計算處理的設(shè)備選擇(三)
13. Metal框架詳細解析(十三) —— 計算處理(一)
14. Metal框架詳細解析(十四) —— 計算處理之你好,計算(二)
15. Metal框架詳細解析(十五) —— 計算處理之關(guān)于線程和線程組(三)
16. Metal框架詳細解析(十六) —— 計算處理之計算線程組和網(wǎng)格大?。ㄋ模?/a>
17. Metal框架詳細解析(十七) —— 工具、分析和調(diào)試(一)
18. Metal框架詳細解析(十八) —— 工具、分析和調(diào)試之Metal GPU Capture(二)
19. Metal框架詳細解析(十九) —— 工具、分析和調(diào)試之GPU活動監(jiān)視器(三)
20. Metal框架詳細解析(二十) —— 工具、分析和調(diào)試之關(guān)于Metal著色語言文件名擴展名、使用Metal的命令行工具構(gòu)建庫和標記Metal對象和命令(四)
21. Metal框架詳細解析(二十一) —— 基本課程之基本緩沖區(qū)(一)
22. Metal框架詳細解析(二十二) —— 基本課程之基本紋理(二)
23. Metal框架詳細解析(二十三) —— 基本課程之CPU和GPU同步(三)
24. Metal框架詳細解析(二十四) —— 基本課程之參數(shù)緩沖 - 基本參數(shù)緩沖(四)
25. Metal框架詳細解析(二十五) —— 基本課程之參數(shù)緩沖 - 帶有數(shù)組和資源堆的參數(shù)緩沖區(qū)(五)
26. Metal框架詳細解析(二十六) —— 基本課程之參數(shù)緩沖 - 具有GPU編碼的參數(shù)緩沖區(qū)(六)
27. Metal框架詳細解析(二十七) —— 高級技術(shù)之圖層選擇的反射(一)
28. Metal框架詳細解析(二十八) —— 高級技術(shù)之使用專用函數(shù)的LOD(一)
29. Metal框架詳細解析(二十九) —— 高級技術(shù)之具有參數(shù)緩沖區(qū)的動態(tài)地形(一)
30. Metal框架詳細解析(三十) —— 延遲照明(一)
31. Metal框架詳細解析(三十一) —— 在視圖中混合Metal和OpenGL渲染(一)
32. Metal框架詳細解析(三十二) —— Metal渲染管道教程(一)
33. Metal框架詳細解析(三十三) —— Metal渲染管道教程(二)
34. Metal框架詳細解析(三十四) —— Hello Metal! 一個簡單的三角形的實現(xiàn)(一)
35. Metal框架詳細解析(三十五) —— Hello Metal! 一個簡單的三角形的實現(xiàn)(二)
36. Metal框架詳細解析(三十六) —— Metal編程指南之概覽(一)
37. Metal框架詳細解析(三十七) —— Metal編程指南之基本Metal概念(二)
38. Metal框架詳細解析(三十八) —— Metal編程指南之命令組織和執(zhí)行模型(三)
39. Metal框架詳細解析(三十九) —— Metal編程指南之資源對象:緩沖區(qū)和紋理(四)
40. Metal框架詳細解析(四十) —— Metal編程指南之函數(shù)和庫(五)
41. Metal框架詳細解析(四十一) —— Metal編程指南之圖形渲染:渲染命令編碼器之Part 1(六)
42. Metal框架詳細解析(四十二) —— Metal編程指南之圖形渲染:渲染命令編碼器之Part 2(七)
43. Metal框架詳細解析(四十三) —— Metal編程指南之數(shù)據(jù)并行計算處理:計算命令編碼器(八)

Buffer and Texture Operations: Blit Command Encoder - 緩沖和紋理操作:Blit命令編碼器

MTLBlitCommandEncoder提供了在資源(緩沖區(qū)和紋理)之間復(fù)制數(shù)據(jù)的方法。 數(shù)據(jù)復(fù)制操作對于圖像處理和紋理效果(例如模糊或反射)可能是必需的。 它們可用于訪問在屏幕外渲染的圖像數(shù)據(jù)。

要執(zhí)行數(shù)據(jù)復(fù)制操作,首先通過調(diào)用MTLCommandBufferblitCommandEncoder方法創(chuàng)建MTLBlitCommandEncoder對象。 然后調(diào)用下面描述的MTLBlitCommandEncoder方法將命令編碼到命令緩沖區(qū)。


Copying Data in GPU Memory Between Resource Objects - 在資源對象之間復(fù)制GPU內(nèi)存中的數(shù)據(jù)

以下MTLBlitCommandEncoder方法在資源對象之間復(fù)制圖像數(shù)據(jù):兩個緩沖區(qū)對象之間,兩個紋理對象之間以及緩沖區(qū)和紋理之間。

1. Copying Data Between Two Buffers - 在兩個緩沖區(qū)之間復(fù)制數(shù)據(jù)

方法copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:在兩個緩沖區(qū)之間復(fù)制數(shù)據(jù):從源緩沖區(qū)到目標緩沖區(qū)toBuffer。如果源和目標是相同的緩沖區(qū),并且正在復(fù)制的范圍重疊,則結(jié)果是未定義的。

2. Copying Data from a Buffer to a Texture - 將數(shù)據(jù)從緩沖區(qū)復(fù)制到紋理

方法copyFromBuffer:sourceOffset:sourceBytesPerRow:sourceBytesPerImage:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:將圖像數(shù)據(jù)從源緩沖區(qū)復(fù)制到目標紋理toTexture。

3. Copying Data Between Two Textures - 在兩個紋理之間復(fù)制數(shù)據(jù)

方法copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:復(fù)制兩個紋理之間的圖像數(shù)據(jù)區(qū)域:從源紋理的單個立方體切片和mipmap級別到目標紋理toTexture。

4. Copying Data from a Texture to a Buffer - 將數(shù)據(jù)從紋理復(fù)制到緩沖區(qū)

方法copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toBuffer:destinationOffset:destinationBytesPerRow:destinationBytesPerImage:將圖像數(shù)據(jù)的區(qū)域從單個立方體切片和源紋理的mipmap級別復(fù)制到目標緩沖區(qū)toBuffer


Generating Mipmaps - 生成Mipmap

MTLBlitCommandEncodergenerateMipmapsForTexture:方法從基礎(chǔ)級紋理圖像開始自動為給定紋理生成mipmap。 generateMipmapsForTexture:為所有mipmap級別創(chuàng)建縮放圖像,直到最大級別。

有關(guān)如何確定mipmap數(shù)量和每個mipmap大小的詳細信息,請參閱Slices


Filling the Contents of a Buffer - 填充緩沖區(qū)的內(nèi)容

MTLBlitCommandEncoder的方法fillBuffer:range:value:在給定緩沖區(qū)的指定range內(nèi)的每個字節(jié)中存儲8位常量value。


Ending Encoding for the Blit Command Encoder - Blit命令編碼器的結(jié)束編碼

要結(jié)束blit命令編碼器的編碼命令,請調(diào)用endEncoding。 在結(jié)束上一個命令編碼器之后,您可以創(chuàng)建任何類型的新命令編碼器,以將其他命令編碼到命令緩沖區(qū)中。

后記

本篇主要介紹了Metal編程指南之緩沖和紋理操作:Blit命令編碼器,感興趣的給個贊或者關(guān)注~~~,今天是雙11了,是我們單身狗的節(jié)日,我很快樂(有點勉強)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容