我目前正在使用CUDA将我的光线跟踪器移植到GPU上,为了让我的脚湿透,我正在修改示例CUDA 6.5项目(添加整数数组)以使用自定义Color结构而不是整数。但是,每当我编译代码时,我都会遇到各种错误。
我的所有类的成员函数都使用__host__
和__device__
属性声明,并且我在.cu
文件中包含了所有定义代码。在我的颜色结构中,我有一个Darken
方法,用给定的量将给定的颜色插入到黑色中。我还有Darken
函数使用的黑色静态定义。
例如,这是结构的精简版本:
// **********************
// .hpp file
// **********************
struct Color
{
float R;
float G;
float B;
__host__ __device__ static Color Darken(const Color& c, float amount);
static Color Black;
};
// **********************
// .cu file
// **********************
const Color Color::Black( 1.0f, 1.0f, 1.0f );
Color Color::Darken(const Color& c, float amount)
{
return Color( Math::Lerp( c.R, Black.R, amount ),
Math::Lerp( c.G, Black.G, amount ),
Math::Lerp( c.B, Black.B, amount ) );
}
但是,每当我编译代码时,都会收到以下错误:
error : identifier "rex::Color::Black" is undefined in device code
我尝试将__device__
,__host__
,__global__
以及这些说明符的各种组合添加到颜色中,但CUDA编译器告诉我它们不适用。此外,在我将任何说明符添加到静态颜色后,颜色的R
,G
和B
组件会出现相同的错误。
有谁知道如何在CUDA中使用静态颜色定义?