OpenGL Cg 几何着色器
Posted
技术标签:
【中文标题】OpenGL Cg 几何着色器【英文标题】:OpenGL Cg Geometry Shader 【发布时间】:2014-05-25 07:13:03 【问题描述】:尝试使用 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);
关于编译器为何抛出该错误的任何想法。设置着色器时是否缺少标志?
【问题讨论】:
我无法重现给定的错误消息。如果您使用独立的cgc
编译它,它是否仍然存在? (cgc -entry geometry_passthru -profile gp5gp geometry_particles.cg
)。无论如何,在几何程序中,您必须指定输入基元类型,例如TRIANGLE void gemetry_passthrough(...
@keltar,感谢您提供的信息,我不熟悉使用 cgc,所以我按照以下站点上的说明进行操作 link,它只是指示将目录设置到着色器文件所在的位置位于。我运行命令,但没有得到任何回报。我不知道我是否应该收到成功/错误消息。另外,我意识到我忘了提到我正在开发 Win8.1,如果这有什么不同的话
如果在cmd中运行,应该会输出编译好的shader代码,否则会报错。您是否在函数声明之前添加了TRIANGLE
说明符?同样的错误是否仍然存在?
是的,我在 void 关键字之前添加了三角形,但在 VS2013 中仍然得到相同的错误,之后我启动 cgc 并按照该站点上的说明进行操作,我还将着色器文件移动到 cgc 所在的位置并运行您提供的命令。在这两种情况下,运行命令时都没有生成输出消息
【参考方案1】:
好的,如果不仔细查看源代码,就没有看到这一点。您使用cgCreateProgram
,它采用程序source,而不是文件名。编译器试图将给定的字符串解析为 cg 源代码,但它不是 - 并报告了错误。
您要使用的是cgCreatePgrogramFromFile
,或者手动加载文件内容。例如
CGprogram program = cgCreateProgramFromFile(myCgContext,
CG_SOURCE,
"geometry_particles.cg",
gpProfile,
"geometry_passthru",
NULL);
关于您的 cgc 空输出 - 我从未在 Windows 上使用过它,所以不能这么说。也许设置选项以输出到文件 (-o out_file
) 会有所帮助。
【讨论】:
谢谢,我不敢相信我错过了那个函数名,特别是因为我在其他着色器上使用它以上是关于OpenGL Cg 几何着色器的主要内容,如果未能解决你的问题,请参考以下文章