Я анализирую текстовый файл для описания сцены и пытаюсь добавить 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);
}