尝试使用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:语法错误,意外'。',在令牌''处期待“::”。
我的几何着色器位于文件“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);
}
}
有关编译器抛出该错误的原因的任何想法。我在设置着色器时错过了一个标志吗?
答案 0 :(得分:0)
好的,没有仔细看过来源就没见过。您使用cgCreateProgram
,它使用程序源,而不是文件名。编译器试图将给定的字符串解析为cg源代码,而不是 - 并报告错误。
您要使用的是cgCreatePgrogramFromFile
,或手动加载文件内容。 E.g。
CGprogram program = cgCreateProgramFromFile(myCgContext,
CG_SOURCE,
"geometry_particles.cg",
gpProfile,
"geometry_passthru",
NULL);
关于你的cgc空输出 - 我从来没有在Windows上使用它,所以不能说。也许设置输出到文件(-o out_file
)的选项会有所帮助。