Пример кода из VCGlib дает сбой Visual Studio 2013

Я сейчас изучаю vcglib (http://vcg.sf.net)

Моя проблема заключается в том, что в следующем коде происходит сбой VS 2013, когда я пытаюсь проверить переменные в окнах «Locals» или «Auto».

std::vector<cl_float4> cloud;
std::vector<cl_uchar4> colors;
std::vector<cl_int> valid;

fetchCloud(cloud);
fetchColors(cloud, colors, valid);class CFace;
class CVertex;
struct MyUsedTypes : public vcg::UsedTypes<
vcg::Use<CVertex>       ::AsVertexType,
vcg::Use<CFace>         ::AsFaceType> {};

/// compositing wanted proprieties
class CVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::Color4b, vcg::vertex::BitFlags> {};
class CFace : public vcg::Face< MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
class CMesh : public vcg::tri::TriMesh< std::vector<CFace>, std::vector<CVertex> > {};

CMesh m;
for (size_t k = 0; k < cloud.size(); ++k) {
if (valid[k]) {
vcg::tri::Allocator<CMesh>::AddVertex(m,
CMesh::CoordType(cloud[k].s[0], cloud[k].s[1], cloud[k].s[2]),
vcg::Color4b(colors[k].s[0], colors[k].s[1], colors[k].s[2], 255)
);
}
}

cout << "saving to file...";
vcg::tri::io::PlyInfo info;
info.mask |= vcg::tri::io::Mask::IOM_VERTCOLOR;
vcg::tri::io::ExporterPLY<CMesh>::Save(m, (base_name + ".ply").c_str(), false, info);
cout << "saved" << endl;

cloud в вышеперечисленном есть от 50000 до 100000 элементов. Это облако точек вычисляется в памяти GPU с использованием OpenCL. функции fetchCloud а также fetchColors загрузить соответствующие данные в память хоста.

Я скопировал код выше из trimesh_ant_freeglut sample, поставляется с vcglib,

Я также успешно скомпилировал и запустил этот пример в VS2013. Он работает нормально, и я могу в любой момент приостановить его в отладчике и проверить все переменные, представляющие интерес.

Я также добавил код к образцу, генерируя облако из 1000000 случайных точек. VS2013 дисплеи mesh переменная, когда я приостанавливаю запущенный пример в отладчике и проверяю переменные.

И мой исходный код, и пример кода включены в то же решение, что и разные проекты. Решение генерируется с использованием CMake.
Основное различие между проектами состоит в том, что каждый использует OpenCL.

Как я мог отладить эту проблему?
Я готов предоставить дополнительную информацию, которая может потребоваться.
Сейчас я просто не знаю, что мне предложить.

Обновить: попытался отключить все расширения — все равно не повезло.

Update2: попросил коллегу скомпилировать, запустить и отладить мой код — его установка Visual Studio также дает сбой.

Update3: Загруженное обновление Visual Studio RC2 — снова вылетает

Update4: Пробовал перемещать код, связанный с class CMesh в исходном файле. Результат нестабилен. Visual Studio иногда дает сбой, а иногда нет. Не вылетает, если код находится сразу после открывающей скобки main, Если между этим кодом и int main(int argc, char **argv) {возможны сбои.

Правильно ли я считаю, что этот код где-то портит стек?

3

Решение

Решено! Перемещая объявления классов за пределы main():

То есть

class CFace;
class CVertex;
struct MyUsedTypes : public vcg::UsedTypes <
vcg::Use<CVertex>       ::AsVertexType,
vcg::Use<CFace>         ::AsFaceType > {};

/// compositing wanted proprieties
class CVertex : public vcg::Vertex < MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f,     vcg::vertex::Color4b, vcg::vertex::BitFlags > {};
class CFace : public vcg::Face < MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
class CMesh : public vcg::tri::TriMesh < std::vector<CFace>, std::vector<CVertex> > {};

int main (int argc, char* argv[])
{
// blah-blah-blah
CMesh m;

//  fill m
}

Теперь без сбоев!

2

Другие решения


По вопросам рекламы [email protected]