小编pau*_*ndo的帖子

Metal - 我不能使用单个缓冲区绘制超过 2048 个点

这是我在这里的第一篇文章,所以请原谅任何无意中违反协议或礼节的行为,谢谢!

基本问题:MetalKt 似乎没有画出我想要显示的所有线条。

详细信息:我正在学习 Metal Frameworks(主要是通过 OS X 上的 MetalKit)的第 3 周。到目前为止,我已经设法将一个 MetalView 组合在一起,显示来自磁盘文件的音频波,并在播放音频时在屏幕上移动一个滑动条。

音频波只是一组代表声级的点,每对点由一条线连接,最终看起来像在 GarageBand 或 Logic 等中看到的东西。

我遇到的问题是 Metal 没有绘制我认为我要求它绘制的所有点。通过反复试验,我发现它在绘制 2048 个点(计算机编号!)后停止。我可以验证我是否正确地输入了数据——也就是说,我收集了足够的点来完全绘制波浪,使用正确的坐标绘制整个波浪,但介于创建缓冲区和要求 Metal 绘制它之间,它被剪裁为 2048。其余的音频只是不显示。

所以我想知道我的创作或 Metal 本身是否有一些缓冲区数据限制,这会导致这种情况。我已经通过使用多个缓冲区解决了这个问题,但这感觉就像是创可贴一样,而且我不明白原因让我很烦恼。

设置相当准系统,没有纹理或缩放(我知道......就像我说的我刚刚开始)

这是我的课程:

// Shaders.metal
#include <metal_stdlib>
using namespace metal;

struct Vertex {
    float4 position [[position]];
    float4 color;
};

struct Uniforms {
    float4x4 modelMatrix;
};

vertex Vertex vertex_func(constant  Vertex *vertices    [[buffer(0)]],
                          constant  Uniforms &uniforms  [[buffer(1)]],
                          uint      vid                 [[vertex_id]]) {
    float4x4 matrix = uniforms.modelMatrix;
    Vertex in       = vertices[vid];
    Vertex out;
    out.position    = …
Run Code Online (Sandbox Code Playgroud)

macos metal

3
推荐指数
1
解决办法
1064
查看次数

标签 统计

macos ×1

metal ×1