在OpenCL代码中使用clamp函数

use*_*251 2 c++ opencl

在我的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的环境.

Moa*_*sry 5

请尝试以下方法

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)

如果这不起作用,那么请看你的颜色参数,但第二和第三个参数现在应该没问题了.