1
我一直在這個衝擊我的頭幾天。我只是學習金屬和圖形編程,我已經生成了有效的地形數據和三角形,並設置了一些變換,並將事物實際顯示在屏幕上(無小事)!但它只會繪製一定數量的三角形然後停止。開始的金屬着色器頂點溢出
經過加載調試後,我發現它總是停在緩衝區偏移量0xFFF0
和0x10008
之間,這恰好是uint16結束的地方。我不知道爲什麼會這樣,但那是我能想到的唯一的事情。
我緩衝器由結構的定義爲:
struct Vertex {
float2 position [[ attribute(0) ]];
float2 tex [[ attribute(1) ]];
float shadow [[ attribute(2) ]];
};
我有我的頂點着色器設置,如:
vertex FragmentIn terrainVertex(constant MetalVertex* verts [[ buffer(0) ]],
constant Constants &mvp [[buffer(1)]],
constant ModelMatrix &modelMat [[buffer(2)]],
uint v_id [[ vertex_id ]]) {
MetalVertex vert = verts[v_id];
FragmentIn outVertex;
outVertex.position = mvp.viewProjectionMatrix * modelMat.modelMatrix * float4(vert.position.x,vert.position.y,0,1);
outVertex.shadow = vert.shadow;
outVertex.uv = vert.tex;
return outVertex;
}
我已在vertex_id宣佈爲uint我認爲這可能是32位。我不確定爲什麼會發生這種情況。
我已經調試了緩衝區,所有的數據都在那裏,並糾正它只是停止後繪製三角形點。
調試它總是結束這樣的三角形:
在緩衝區破三角形中的數據不會被畫什麼。抽獎電話是簡單drawPrimitives,我一直在調試,但它們看起來像:
renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 1500, instanceCount: 500)
let count = 411
renderEncoder.drawPrimitives(type: .triangle, vertexStart: 1500, vertexCount: count * 3, instanceCount: count)
有沒有人看到這一點,知道什麼回事?