构造函数调用中的GLM cuda错误

时间:2015-09-07 07:21:25

标签: 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() : 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修复了问题。

1 个答案:

答案 0 :(得分:0)

问题是由GLM中的错误导致的,回到版本9.6.2为我解决了问题。它也应该在最新版本中修复(此时为9.7.1。)