Я новичок в Apple Metal, когда запускаю пример кода яблока " Создание и выборка текстур ", я обнаружил что-то странное, " Рисунок 1 " - результат в моем Macmini 2018 (графический процессор Intel® RHD Graphics 630) , вы можете видеть, что левый нижний угол четырехугольника сжимается, исходный источник использует setVertexBuffer:offset:atIndex:
для установки буфера вершин, я заменяю его на setVertexBytes:length:atIndex:
и запустите, результат отобразится как " Figure 2 ", кажется, что все идет хорошо, затем я собираю и запускаю источник источника на другой машине ( Macbookpro, GPU - GeForce GT 750M )четверка отображается правильно, результат отображается как " Figure 2 ", поэтому источник чего-то не хватает или есть какие-то проблемы в функции setVertexBuffer:offset:atIndex:
?
Figure 1
![figure 1](https://i.stack.imgur.com/XRSJX.png)
Рисунок 2
![Figure 2](https://i.stack.imgur.com/H2hSO.png)
// 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];
Я делаю квадратные вершины какглобальный массив и замените "setVertexBuffer: offset: atIndex:" на "setVertexBytes: length: atIndex:"
[renderEncoder setVertexBytes:&quadVertices
length:sizeof(quadVertices)
atIndex:AAPLVertexInputIndexVertices];