首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL Cg几何着色机

OpenGL Cg几何着色机
EN

Stack Overflow用户
提问于 2014-05-25 07:13:03
回答 1查看 440关注 0票数 0

在使用OpenGL初始化几何着色器时,我得到了一个编译器错误。我在用VS2013。

下面是我如何在OpenGL上初始化它

代码语言:javascript
复制
myCgContext = cgCreateContext();
cgGLSetDebugMode(CG_FALSE);

cgSetParameterSettingMode(myCgContext, CG_DEFERRED_PARAMETER_SETTING);

CGprofile gpProfile = cgGLGetLatestProfile(CG_GL_GEOMETRY);


if (gpProfile == CG_PROFILE_UNKNOWN) {
    if (cgGLIsProfileSupported(CG_PROFILE_GLSLG))
        gpProfile = CG_PROFILE_GLSLG;
    else {
        fprintf(stderr, "%s: geometry profile is not available.\n", gpProfile);
        exit(0);
    }
}


cgGLSetOptimalOptions(gpProfile);
OpenGLRenderer::checkForCgError("selecting geometry profile");

CGprogram prog = cgCreateProgram(myCgContext, 
                                    CG_SOURCE, 
                                    "geometry_particles.cg",
                                    gpProfile, 
                                    "geometry_passthru",
                                    NULL);
OpenGLRenderer::checkForCgError("Geometry program");

当我调用函数checkForCgError时,编译器抛出以下错误消息:编译器返回一个错误。(1):错误C0000:语法错误,意外'.',期望::“at token‘.”

我的几何图形着色器位于"geometry_particles.cg“文件中,代码是

代码语言:javascript
复制
// Geometry pass-through program for colored triangles
void geometry_passthru(AttribArray<float4> position : POSITION, 
                    AttribArray<float4> color   : COLOR)
{
    for (int i = 0; i < 3; i++) 
    {
        emitVertex(position[i] :POSITION, color[i] : COLOR);
    }
}

对于编译器为什么抛出该错误有任何想法。我在设置着色器时是不是漏了一面旗子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-26 06:01:15

好吧,如果不仔细看资料来源还没看过。您使用的是cgCreateProgram,它使用的是程序源代码,而不是文件名。编译器试图将给定的字符串解析为cg源代码,但它不是--并报告了一个错误。

您想要使用的是cgCreatePgrogramFromFile,或者手动加载文件内容。例如。

代码语言:javascript
复制
CGprogram program = cgCreateProgramFromFile(myCgContext,
                                        CG_SOURCE,
                                        "geometry_particles.cg",
                                        gpProfile,
                                        "geometry_passthru",
                                        NULL);

关于您的cgc空输出--我从未在windows上使用过它,所以不能这样说。也许将选项设置为output (-o out_file)会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23852935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档