在我的OpenCL代码中(它不是我自己编写的,它只是来自互联网的示例代码),有以下句子使用clamp的功能.
return clamp(color,0,1);
Run Code Online (Sandbox Code Playgroud)
但是,这似乎在编译期间产生错误,因此我通过使用clGetProgramBuildInfo中的CL_PROGRAM_BUILD_LOG获得了错误信息消息.
Error during compilation! (-11)
4483
build log
:211:9: error: call to 'clamp' is ambiguous
return clamp(color,0,1);
^~~~~
<built-in>:3558:26: note: candidate function
float4 __OVERLOADABLE__ clamp(float4 x, float min, float max) ;
^
<built-in>:3577:25: note: candidate function
float4 __OVERLOADABLE__ clamp(float4, float4, float4);
^
<built-in>:3556:26: note: candidate function
float3 __OVERLOADABLE__ clamp(float3 x, float min, float max) ;
^
<built-in>:3575:25: note: candidate function
float3 __OVERLOADABLE__ clamp(float3, float3, float3);
^
:296:52: error: address expression must be an lvalue or a function designator
r.origin = matrixVectorMultiply(viewTransform, &(float3)(0, 0, -1));
^~~~~~~~~~~~~~~~~~
:297:62: error: address expression must be an lvalue or a function designator
r.dir = normalize(matrixVectorMultiply(viewTransform, &(float3)(x, y, 0)) - r.origin);
^~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
在OpenCL代码中使用钳位功能是否有必要的关键字?顺便说一下,我正在使用Linux Ubuntu 10.04 64bit的环境.
请尝试以下方法
return clamp(color,0.0f,1.0f);
Run Code Online (Sandbox Code Playgroud)
这样我们就可以确定第2和第3个参数不是模糊的,并且您正在尝试调用该函数:
clamp(float4 color, float min, float max);
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,那么请看你的颜色参数,但第二和第三个参数现在应该没问题了.