OpenGL Cg几何着色器



当尝试使用OpenGL初始化几何着色器时,我得到一个编译器错误。我使用VS2013。
下面是我如何在OpenGL

上初始化它
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): error C0000:语法错误,unexpected '。',期待'::' at token '.'

我的几何着色器位于文件"geometry_particles。,代码是

// 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);
    }
}

对于编译器抛出这个错误的原因有什么想法吗?在设置着色器时,我是否缺少一个标志?

好的,如果不仔细看源代码,我还没有看到这个。您使用cgCreateProgram,它接受程序,而不是文件名。编译器试图将给定的字符串解析为cg源代码,而不是cg源代码,并报告错误。

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

CGprogram program = cgCreateProgramFromFile(myCgContext,
                                        CG_SOURCE,
                                        "geometry_particles.cg",
                                        gpProfile,
                                        "geometry_passthru",
                                        NULL);

关于你的cgc空输出-我从来没有在windows上使用过它,所以不能说。也许设置选项输出到文件(-o out_file)会有所帮助。

最新更新