GLSL可以处理任意长度的缓冲区吗?

问题描述 投票:0回答:1

我有一个艺术应用程序,我正在使用OpenGL加速图形渲染。我希望能够添加绘制任意分段曲线的能力 - 几乎可以通过SVG'path'元素定义的相同形状。

我不认为将我的路径细分为CPU上的多边形,我认为将缓冲区中的值数组传递给定义曲线片段的着色器然后使用输入/输出测试检查哪些像素实际位于内部可能更好。换句话说,我将遍历描述路径中每个段的潜在大量数据。

根据我多年前学习着色器编程时的记忆,GPU通过评估两个分支然后丢弃未使用的分支来处理if语句。这实际上意味着即使我只使用了它的一小部分它也会默默地运行在我的整个缓冲区中(即,我的缓冲区有能力处理1024个曲线段,但我绘制的简单矩形仅使用了前四个)。

如何编写代码来处理这个可变数据?现代GPU可以像这样处理条件代码吗?

opengl svg glsl
1个回答
0
投票

GPU可以处理任意长度的缓冲区和条件(或令人信服地伪造)。问题是顶点和几何着色器不能从简短描述中生成任意数量的三角形。

OpenGL 4.0添加了两种新类型的着色器:Tessellation Control着色器和Tessellation Evaluation着色器。这些着色器使您能够在GPU上细分曲线和曲面。

我发现this tutorial在展示如何在GPU上镶嵌贝塞尔曲线方面非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.