在使用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):错误C0000:语法错误,意外'.',期望::“at token‘.”
我的几何图形着色器位于"geometry_particles.cg“文件中,代码是
// 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);
}
}对于编译器为什么抛出该错误有任何想法。我在设置着色器时是不是漏了一面旗子?
发布于 2014-05-26 06:01:15
好吧,如果不仔细看资料来源还没看过。您使用的是cgCreateProgram,它使用的是程序源代码,而不是文件名。编译器试图将给定的字符串解析为cg源代码,但它不是--并报告了一个错误。
您想要使用的是cgCreatePgrogramFromFile,或者手动加载文件内容。例如。
CGprogram program = cgCreateProgramFromFile(myCgContext,
CG_SOURCE,
"geometry_particles.cg",
gpProfile,
"geometry_passthru",
NULL);关于您的cgc空输出--我从未在windows上使用过它,所以不能这样说。也许将选项设置为output (-o out_file)会有帮助。
https://stackoverflow.com/questions/23852935
复制相似问题