【发布时间】:2013-05-21 09:39:39
【问题描述】:
在我的项目中,我使用“丢弃”调用来执行自定义模板测试,该测试尝试仅在模板纹理定义的指定区域上绘制东西。这是片段着色器的代码:
//get the stencil value from a texture
float value=texture2D( stencilTexture, gl_FragCoord.xy/1024.0).x;
//check if value equals the desired value, if not draw nothing
if(abs(value-desiredValue)>0.1)
{
discard;
}
此代码有效,但由于“丢弃”调用而出现性能问题。有没有其他方法可以通过 GPU 着色器做到这一点?告诉我怎么做。
【问题讨论】:
-
为什么不能使用默认模板测试(不在着色器中)?你会得到同样的结果。
-
"alliterative" 我认为您的意思是“替代”。此外,还不清楚为什么需要使用 stencil 纹理来执行此操作。或者为什么你认为
discard调用是一个性能问题(或者如果它是一个性能问题,那么问题比纹理访问本身更糟糕)。 -
@NicolBolas:对不起我的拼写错误,在我的实验中我发现discard call是一个性能问题,link也报告了这个问题
-
@fen:感谢您的回复。我想在着色器中使用模板测试,因为我想在单个渲染通道中实现在不同的预定义区域上绘制我的场景。
-
@Sunf71:那么这并不是真正的“模板测试”;它只是根据从纹理访问中获取的值丢弃片段。模板化专门用于使用由一个渲染对象(可见或不可见)写入的值来防止写入这些渲染位置。
标签: opengl fragment-shader stencil-buffer