我正在通過教程書學習 raywenderlich 金屬。書中有一個關于選擇物件的例子。我是金屬新手,我對我的英語感到抱歉。
typedef struct {
uint width;
uint height;
uint tiling;
uint lightCount;
vector_float3 cameraPosition;
uint objectId;
uint touchX;
uint touchY;
} Params;
//this struct sent to fragment shader by
encoder.setFragmentBytes(¶ms, length: MemoryLayout<Params>.stride, index:
ParamsBuffer.index)
//end hit test in fragment shader like this
fragment float4 fragment_main(constant Params ¶ms [[buffer(ParamsBuffer)]],
//...
if(params.objectId != 0 && objectID == params.objectId) {
material.baseColor = float3(0.9, 0.5, 0);
}
只是我可以在片段著色器中進行測驗..如果我想在 swift 端獲取選定的 objectId 值我應該怎么做..或者假設只是在這里進行命中測驗..我不明白這部分。值可以共享 CPU 和 GPU 端(在此示例中objectId),或者我必須在著色器中處理我發送的值。有人可以解釋一下嗎?
選擇測驗作業正常,但是當我嘗試在 swift 端獲取objectId值時,objectId 值始終為 0
print(params.objectId)
uj5u.com熱心網友回復:
有沒有辦法從 cpu 端的片段著色器中讀取常量值?
是的,您必須從指定的資料創建一個新的MTLBuffer物件,然后使用該setFragmentBuffer(_:offset:index:)
方法將其系結到片段著色器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528930.html
標籤:迅速常数金属片段着色器