我将库存烟雾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);
}