我是Apple Metal的新手,运行苹果示例代码“ Creating and Sampling Textures”时,我很喜欢一些奇怪的东西,“ 图1 ”是我的 Macmini 2018的结果(GPU是Intel®UHD Graphics 630),您可以看到四边形的左下角受到挤压,原始源使用setVertexBuffer:offset:atIndex:
设置顶点缓冲区,我将其替换为{{1} },然后运行,结果显示为“ 图2 ”,看来一切正常,然后我在另一台计算机上构建并运行了原始源( Macbookpro,GPU是GeForce GT 750M ),四边形是正确渲染的,结果显示为“ 图2 ”,那么源是否丢失了某些东西,或者函数setVertexBytes:length:atIndex:
中是否存在某些问题?
图1
图2
setVertexBuffer:offset:atIndex:
我将quadVertices设为全局数组,并替换
从“ setVertexBuffer:offset:atIndex:”到“ setVertexBytes:length:atIndex:”// Apple's origin source
//
static const AAPLVertex quadVertices[] =
{
// Pixel positions, Texture coordinates
{ { 250, -250 }, { 1.f, 1.f } },
{ { -250, -250 }, { 0.f, 1.f } },
{ { -250, 250 }, { 0.f, 0.f } },
{ { 250, -250 }, { 1.f, 1.f } },
{ { -250, 250 }, { 0.f, 0.f } },
{ { 250, 250 }, { 1.f, 0.f } },
};
...
...
...
//Create a vertex buffer, and initialize it with the quadVertices array
_vertices = [_device newBufferWithBytes:quadVertices
length:sizeof(quadVertices)
options:MTLResourceOptionCPUCacheModeDefault];
...
...
// set the vertex buffer
[renderEncoder setVertexBuffer:_vertices
offset:0
atIndex:AAPLVertexInputIndexVertices];
答案 0 :(得分:0)
最后,我在缓冲区创建函数中将MTLResourceOptions类型更改为“ MTLResourceCPUCacheModeWriteCombined”,问题已解决。
_vertices = [_device newBufferWithBytes:quadVertices
length:sizeof(quadVertices)
options:MTLResourceCPUCacheModeWriteCombined];
现在该示例在MacMini 2018(GPU为Intel®UHD Graphics 630)和Macbookpro(GPU为GeForce GT 750M)中都可以正常工作。