【问题标题】:compiler error on vec4 kernel routinevec4内核例程上的编译器错误
【发布时间】:2010-07-11 10:34:09
【问题描述】:

我正在尝试将以下内核例程包含到我的 Cocoa / Objective C 项目中。但是我在构建项目时遇到了编译器错误。第一行用语法错误标记,在 'vec4' 之前显示“expected '=', ',', ';', 'asm' or 'attribute'.

任何想法这意味着什么以及如何解决它?据我所知,该声明看起来与我能找到的所有其他内核示例非常相似。

kernel vec4 threshold(sampler image, float midPoint, float range ) // First error on this line
//This from http://www.codingadventures.com/2008/06/threshold-filter-in-glsl/
{
    vec4 pixel=unpremultiply( sample(image, samplerCoord(image)) );

    float high = midPoint + range * 0.5;
    float low = midPoint - range * 0.5; 

    high = min(1.0, high);
    low = max(0.0, low);

    float brightness = 0.3 * pixel.x + 0.59 * pixel.y+ 0.11 *pixel.z;

    brightness = step( low, brightness ) * brightness;

    brightness = brightness + step(  high, brightness );
    brightness = min( 1.0, brightness );

    pixel.x = pixel.y =pixel.z = brightness;

    return premultiply(pixel);
}

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    您缺少框架导入。错误在于编译器不知道kernel 的含义(它希望您为它分配一个值或以其他方式声明它)。

    尝试关注these steps

    1. 选择项目 > 添加到项目。
    2. 导航到System/Library/Frameworks,选择 QuartzCore.framework 并点击添加。
    3. 在出现的工作表中,点击添加。

    然后您可能需要在您希望使用 Core Image 的所有文件中额外添加#import <QuartzCore/QuartzCore.h>

    【讨论】:

    • 感谢您的回复,马特。我的项目中确实有 QuartzCore.framework(在框架/链接框架下)。我将#import 语句添加到我正在编译的.m 模块中。但我仍然有同样的错误......还有其他想法吗?
    • @Adam:也许尝试将您的编译器更改为 Clang。它通常有更好的错误消息,并且可能为您(或其他 SO)提供有关问题所在的更好线索。
    • 列出了编译器的其他三种选择(假设我正在寻找正确的位置——项目信息/编译器版本):GCC 的早期版本和 LVMM 编译器的两种变体。我尝试了所有这些并且我的编译器错误没有改变。我不确定这是否意味着它们都返回完全相同的消息......或者由于某种原因我尝试更改编译器的尝试不起作用。没有列出 Clang。我试着把它输入到“其他”列表中。它让我这样做,但这对错误消息也没有影响。
    • 考虑到第一行可能有某种不可打印的字符(我看不到但会弄乱编译器),我手动重新输入了整行。这对编译器错误没有影响...
    • @Adam:啊,我想我错了你缺少的框架。尝试添加 OpenCL 框架并将#import <OpenCL/opencl.h> 添加到该文件。
    猜你喜欢
    • 2017-07-30
    • 2010-12-06
    • 1970-01-01
    • 2017-10-01
    • 2015-10-14
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多