gpt4 book ai didi

objective-c - MacOS MTKView metal self.device.newBufferWithBytes 因断言而崩溃

转载 作者:行者123 更新时间:2023-12-01 03:06:29 27 4
gpt4 key购买 nike

我想绘制一个简单的三角形,但在尝试创建 MTLBuffer 后它崩溃了。

static float vertexes[] = {
0.0, 0.5, 0.0,
-0.5f, -0.5f, 0.0,
0.5, -0.5f, 0.0
};

id <MTLBuffer> buffer = [self.device newBufferWithBytes:vertexes
length:sizeof(vertexes) options:MTLResourceStorageModePrivate];

这是断言:

-[MTLDebugDevice newBufferWithBytes:length:options:]:392: failed assertion `storageModePrivate incompatible with ...WithBytes variant of newBuffer'

那么如何使用 MTLResourceStorageModePrivate 选项从顶点创建缓冲区?

最佳答案

您必须创建一个临时 blit 缓冲区并使用它来将内容复制到专用缓冲区。下面是示例代码:

buffer = [self.device newBufferWithLength:sizeof( vertexes )
options:MTLResourceStorageModePrivate];

id<MTLBuffer> blitBuffer = [self.device newBufferWithBytes:vertexes
length:sizeof( vertexes )
options:MTLResourceCPUCacheModeDefaultCache];

id <MTLCommandBuffer> cmd_buffer = [commandQueue commandBuffer];
id <MTLBlitCommandEncoder> blit_encoder = [cmd_buffer blitCommandEncoder];
[blit_encoder copyFromBuffer:blitBuffer
sourceOffset:0
toBuffer:buffer
destinationOffset:0
size:sizeof( vertexes )];
[blit_encoder endEncoding];
[cmd_buffer commit];
[cmd_buffer waitUntilCompleted];

关于objective-c - MacOS MTKView metal self.device.newBufferWithBytes 因断言而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51159795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com