metal

    0熱度

    1回答

    我想使用浮點變量作爲索引來訪問MTLBuffer的位置,但我必須將其轉換爲無符號整型。那麼,這是我的第一個想法。 在實踐中,這似乎並沒有工作,但我不明白爲什麼。 我基本上有類似: vertex VertexOut basic_vertex(const device float3 *vertex_array [[ buffer(0) ]], const device floa

    2熱度

    1回答

    我試圖將this shadertoy scene轉換爲Metal Kernel。在shadertoy代碼: void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec3 dir = rayDirection(45.0, iResolution.xy, fragCoord); ... } 在OpenGL情況下,我

    2熱度

    1回答

    我需要幫助來替換MTLBuffer的內容而不創建新內容。兩種情況下的內容都是浮動數組。 let vector:[Float] = [0,1,2,3,4,5,6,7,8,9] let byteLength = arr1.count*MemoryLayout<Float>.size let buffer = metalDevice.makeBuffer(bytes: &vector, length

    2熱度

    1回答

    我已按照蘋果公司的this example縮小圖像大小downloading from a remote location。我已經在Swift中重寫了代碼。它顯然是有效的,但是當我打電話給MTKTextureLoader.newTexture時,應用程序在_loadCGImage中崩潰了EXC_BAD_ACCESS。沒有其他提示,但我懷疑圖像數據已被釋放或什麼... 任何暗示爲什麼它會崩潰沒有任何

    1熱度

    1回答

    我一直在努力加快渲染速度,但只能讓它變慢,而且我很難理解發生了什麼。我在2D遊戲中繪製了一些地形,所以想象各種紋理屏幕上的長條紋。 先前的實現會整理各種紋理並遍歷這些紋理,並以不同的方式繪製與紋理相關的三角形,如您所想象的那樣會導致多次繪製調用並且多次​​強制切換一些制服整個過程中,如果我們圍繞邊緣。 所以現在我所做的就是將所有的紋理都打包在一起,這樣我就不必改變它們,並且可以一次繪製大量的三角形

    2熱度

    1回答

    我在晚上嘗試學習Apple的金屬圖形API時花了一些時間。我遇到了一個令人沮喪的問題,因此必須忽略一些非常基本的東西:當深度測試被禁用時,或者當深度函數改變爲「更大」時,我只能得到渲染對象出現在屏幕上。什麼可能會出錯?另外,爲了調試此問題,我可以檢查哪些類型的東西? 下面是我在做什麼: 1)我使用SDL創建我的窗口。設置Metal時,我手動創建一個CAMetalLayer並將其插入到圖層層次結構中

    2熱度

    1回答

    最近我決定學習如何在Swift中使用Metal框架。我讀了一些turorials,觀看視頻,做了一些事情,最後我得到了我必須使用深度測試的一部分,使事情看起來不錯。 我以前沒有做過這種低級別的圖形編程,所以我環顧四周,整個互聯網上的測試是如何工作的深度,以及如何使用CAMetalLayer和金屬來實現它。 但是深度測試,我發現,使用Open GL的完成,在金屬我找不到這樣的功能的例子。 如何使用M

    1熱度

    1回答

    是否可以在沒有osx_ReadWriteTextureTier2的情況下就地處理MTLTexture? 看來我可以設置兩個紋理參數是相同的紋理。這是支持的行爲? 具體來說,我不介意寫入後沒有紋理緩存更新。我只是想就地(和稀疏)修改一個3d紋理。這是內存禁止有兩個紋理。複製整個紋理的計算量很大,特別是當我只更新其中的一小部分時。

    2熱度

    1回答

    下面是一個簡單的頂點和片段着色器組合,其中metal表示64個相同的2D四邊形。 vertex VertexOut vertexMain(uint k [[ vertex_id ]], uint ii [[instance_id]], device float2* tex [[buffer(2)]], device float2*

    1熱度

    1回答

    我們正在處理隔行高清視頻。我用於渲染的金屬顏色附件具有一個字段(1920 * 540 RGBA)的尺寸。 當我嘗試將兩個渲染字段複製到具有1920 * 1080 * 4 = 8294400字節大小的相同MTLBuffer時,它僅適用於目標偏移量爲零的情況。 let commandBuffer = commandQueue.makeCommandBuffer() let blitEncoder =