这个问题专门针对Android上的OpenGL 2.0 ES,但如果有更多基于OpenGL规范的一般答案,我也会对这些问题感兴趣。
有没有办法将GL 2.0 ES着色器中的消息(字符串)传递给应用程序代码(Java或本机)? E.g。
void main()
{
...
if (somecondition)
{
logMessage("Things are messed up man");
}
}
如果没有,为什么在没有这种类型的工具的情况下定义编程环境(在这种情况下是OpenGL ES 2.0着色器语言)?我对硬件一无所知,但肯定不会在GPU中实现这一点。如果存在性能问题,可以选择使用着色器代码中的#ifdef'
答案 0 :(得分:3)
不,没有像任何OpenGL着色语言(包括OpenGL ES)那样要求的日志工具。桌面OpenGL上的调试上下文(以及当它们到达时在ES中)可能会提供一些信息,但没有什么比你要求的更好。
最常见的技术(通常在片段着色器的上下文中完成)是将着色器的输出设置为错误颜色,或者指示着色器在某些条件下失败的其他信号。< / p>
鉴于特定着色器的许多实例同时执行(想想在填充全屏四边形时执行了多少个片段着色器线程),跟踪每个线程的状态将需要相当多的状态来完成工作。
你说:
我对硬件一无所知,但肯定不会在GPU中实现这一点。
没有;现代GPU是复杂设计的复杂机器。虽然这样做是可能的,但是不值得额外的复杂性和硬件验证。这就是API的神奇之处,而类似的东西在概念上看起来很简单,但事实并非如此。
答案 1 :(得分:0)
激进7回答是正确的。
如果要调试着色器代码,GPU供应商会提供编译器和模拟器。或者您可以尝试glm library并使用C ++对着色器进行编码,并使用所有工具打印您需要的消息。