Почему вторая RTP-модель не инициализируется - PullRequest
0 голосов
/ 09 мая 2019

Я анализирую текстовый файл для описания сцены и пытаюсь добавить Optix Prime RTPmodel для каждого треугольника в файле. Это работает для первого треугольника, но вторая модель почему-то все еще является пустой ссылкой после инициализации. Программа выдает следующую ошибку: Exception thrown at 0x00007FFB608640D0 (optix_prime.6.0.0.dll) in CustomEngine.exe: 0xC0000005: Access violation reading location 0x0000000000000020 при вставке модели в вектор.

Я использую VC ++ в Visual Studio и Optix 6.0

Я пытался сделать все создание RTPmodel в одной функции, но безрезультатно. Поскольку он влияет только на вторую модель, он анализирует, это может быть какой-то закрывающий вызов функции, который я забыл, но я вызываю rtpModelUpdate(), а также пробовал с rtpModelFinish(), но тогда возникает ошибка вместо push_back. Буфер, блокирующий несвязанный буфер (буфер обращений), кажется, разрешает его, но выдает то же исключение при создании запроса RTP.

    // Parses a triangle definition
    void SceneParser::parseTriangle(const char* line)
    {
        //
        // [...] This is where I parse the vertices
        //
        std::vector<float> vertices({ v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, v2.x, v2.y, v2.z });
        std::vector<uint> indices({ 0, 1, 2 });

        RTPmodel triangle;
        rtpModelCreate(m_scene->getContext(), &triangle); // after this call, the second parsed triangle is still NULL, whereas the first had an adress
        m_scene->addObject(triangle, vertices, indices, TransformMatrix(vec3(0.0f), 0.0f)); // Dummy transform, since the vertices are already in place
    }
// Adds the object to the object queue as a triangle model and as a transformation matrix to the transform queue
void Scene::addObject(RTPmodel model, std::vector<float> vertices, std::vector<uint> indices, TransformMatrix transform)
{
    RTPbufferdesc indBuffer, verBuffer;
    rtpBufferDescCreate(m_context, RTP_BUFFER_FORMAT_INDICES_INT3, RTP_BUFFER_TYPE_CUDA_LINEAR, indices.data(), &indBuffer);
    rtpBufferDescCreate(m_context, RTP_BUFFER_FORMAT_VERTEX_FLOAT3, RTP_BUFFER_TYPE_CUDA_LINEAR, indices.data(), &verBuffer);
    rtpBufferDescSetRange(indBuffer, 0, indices.size());
    rtpBufferDescSetRange(verBuffer, 0, vertices.size());

    rtpModelSetTriangles(model, indBuffer, verBuffer);
    rtpModelUpdate(model, RTP_MODEL_HINT_NONE);

    m_objects.push_back(model); // This is where the exception happens
    m_transforms.push_back(transform);
}
...