C++ 构造函数调用时发生GLM cuda错误
已解决 我正在尝试创建一个使用GLM数学库的CUDA程序。 我有一个用于相机和光线的类/结构,定义为:C++ 构造函数调用时发生GLM cuda错误,c++,cuda,glm-math,C++,Cuda,Glm Math,已解决 我正在尝试创建一个使用GLM数学库的CUDA程序。 我有一个用于相机和光线的类/结构,定义为: class Camera { public: vec3 pos; vec3 lookat; vec3 up; float fov; Camera(vec3& p, vec3& la, vec3& u, float f) : pos(p), lookat(la), up(u), fov(f) {} Camera() : p
class Camera
{
public:
vec3 pos;
vec3 lookat;
vec3 up;
float fov;
Camera(vec3& p, vec3& la, vec3& u, float f) : pos(p), lookat(la), up(u), fov(f) {}
Camera() : pos(vec3(0.0f, 0.0f, 10.0f)), lookat(vec3(0.0f, 0.0f, -1.0f)), up(vec3(0.0f, 1.0f, 0.0f)), fov(60.0f*0.0174532925f) {}
};
typedef struct Ray
{
vec3 pos;
vec3 dir;
__device__ __host__ Ray(vec3& p, vec3& d) : pos(p), dir(d) {}
__device__ __host__ Ray() {}
} Ray;
当我尝试创建一个使用摄影机和光线的函数时,问题出现了,如下所示:
__device__ __host__ void calculateRay(int x, int y, int width, int height, Camera& camera)
{
float xoff = (x + 0.5f) / width;
float yoff = ((height - y) + 0.5f) / height;
vec3 dir = normalize(camera.lookat);
vec3 right = normalize(cross(dir, camera.up)) * (xoff - 0.5f);
vec3 down = -camera.up * (yoff - 0.5f);
dir += down + right;
vec3 rayDir = normalize(dir);
Ray ray(camera.pos, rayDir); //Error here
/*
Ray ray;
ray.pos.x = camera.pos.x;
ray.pos.y = camera.pos.y;
ray.pos.z = camera.pos.z;
ray.dir.x = rayDir.x;
ray.dir.y = rayDir.y;
ray.dir.z = rayDir.z;
*/
}
如果我注释掉“Ray-Ray(camera.pos,rayDir);”一行,它编译得很好。如果我将其注释掉并取消注释下面的部分,它也会编译
编译器给出的错误是
error MSB3721: The command ""F:\dev\CUDA\bin\nvcc.exe"
-gencode=arch=compute_50,code=\"sm_52,compute_50\" --use-local-env
--cl-version 2013 -ccbin "F:\programs\Microsoft Visual Studio 12.0\VC\bin"
-IG:\old\things\include\glm -IF:\dev\CUDA\include -IF:\dev\CUDA\include
-G --keep-dir Debug -maxrregcount=0 --machine 32 --compile
-cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler
"/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\kernel.cu.obj
"C:\Users\a\Documents\Visual Studio 2013\Projects\RayTracer\kernel.cu""
exited with code 255.
虽然我似乎找不到导致错误代码255的原因
编辑:已解决-原来这是由GLM中的错误引起的,返回到9.6.2版本修复了该问题 该问题是由GLM中的一个bug引起的,返回到9.6.2版为我修复了该问题。它也应该在最新版本(目前是9.7.1)中修复。请发布一个;哪一个GLM版本,您使用哪一个CUDA版本?@ M.S.感谢您的回复,查找GLM版本使我想到尝试旧版本,并解决了这个问题。您可以考虑报告GLM或CUDA的错误,这取决于哪一个是负责的;当然,这需要一个wellOn堆栈溢出,通常表示问题“已解决”的方法不是在问题文本中标记为“已解决”,而是提供一个答案。我在两天内无法回答自己的问题。