SCNParticleSystem Crash - PullRequest
       40

SCNParticleSystem Crash

0 голосов
/ 12 октября 2018

Я добавляю стандартную дымовую 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, который я использую из здесь для работающего ARKit demo с системой частиц и тем же крахом функции вершины.

Означает ли это, что проблема связана с функцией сквозного вершинного шейдера?

Почему системы частиц обрабатываются по-разному?

Ниже приведены функции шейдера.Благодарю.

#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);
}
...