SCNParticleSystem崩溃

时间:2018-10-12 02:33:03

标签: ios scenekit arkit metal

我将库存烟雾SCNParticleSystem添加到ARSCNView中场景中的节点。这可以按预期工作。

在使用ARSCNView.snapshot() MTKView方法绘制之前,我使用draw()捕获图像并进行处理。

然后我在具有粒子系统的节点上的主线程上调用removeAllParticleSystems(),并通过removeFromParent()从场景中删除该节点。

然后我将其他节点添加到场景中,最终,应用程序崩溃,并显示错误validateFunctionArguments:3469: failed assertion 'Vertex Function(uberparticle_vert): missing buffer binding at index 19 for vertexBuffer.1[0].'

All Exceptions断点通常在ARSCNView.snapshot()调用时停止。

这为什么崩溃?

错误是什么意思?

我应该如何在ARSCNView的场景中添加和删除粒子系统?

更新: 我将使用的MTKView子类从updateConstraintsifNeeded连接到具有粒子系统的工作ARKit here,并且发生了相同的“顶点函数”崩溃。

这是否意味着传递顶点着色器功能存在问题?

为什么对粒子系统进行不同的处理?

以下是着色器功能。谢谢。

#include <metal_stdlib>
using namespace metal;

// Vertex input/output structure for passing results from vertex shader to fragment shader
struct VertexIO
{
    float4 position [[position]];
    float2 textureCoord [[user(texturecoord)]];
};

// Vertex shader for a textured quad
vertex VertexIO vertexPassThrough(device packed_float4 *pPosition  [[ buffer(0) ]],
                                  device packed_float2 *pTexCoords [[ buffer(1) ]],
                                  uint                  vid        [[ vertex_id ]])
{
    VertexIO outVertex;

    outVertex.position = pPosition[vid];
    outVertex.textureCoord = pTexCoords[vid];

    return outVertex;
}

// Fragment shader for a textured quad
fragment half4 fragmentPassThrough(VertexIO        inputFragment [[ stage_in ]],
                                   texture2d<half> inputTexture  [[ texture(0) ]],
                                   sampler         samplr        [[ sampler(0) ]])
{
    return inputTexture.sample(samplr, inputFragment.textureCoord);
}

0 个答案:

没有答案