我正在学习雷文德利希金属教程的书。书中有一个关于选择对象的例子。我是新来的金属,我很抱歉我的英语。
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);
}
只是我可以在碎片着色器里进行测试。如果我想在快速边得到选定的objectId值,我应该怎么做..或者就在这里进行测试。我不明白这部分。值可以是共享CPU和GPU端(在本例中是objectId),也可以是在着色器中处理我发送的值。有人能解释一下吗?
选择测试工作正常,但是..。objectId值总是,当我尝试获取objectId值时
print(params.objectId)
发布于 2022-11-07 10:40:00
是否有从cpu端的片段着色器读取常量的方法?
是的,您必须从指定的数据创建一个新的MTLBuffer对象,然后使用setFragmentBuffer(_:offset:index:)
方法将其绑定到片段着色器。
https://stackoverflow.com/questions/74350721
复制