我正在使用OpenGL编写自己的2D GUI库,目前我已经实现了一个容器控件,可以包含图形元素(如圆角矩形或星形)和其他子控件等等。我尝试将子控件和图形元素的渲染限制在父控件内部,这样如果子控件超出容器边界,就不会被渲染。
我的第一个想法是使用"裁剪测试",在搜索网页时发现了它。但问题是,我只能使用矩形裁剪,而我希望能够在任意区域(如星形多边形)内进行裁剪。
我有一个想法...
当绘制控件及其图形元素时,我查看该控件是否需要裁剪其内容。如果是,我将其以统一的白色颜色绘制在黑色背景的离屏纹理中。然后我将其发送到着色器程序中。因此,我使用激活的着色器程序渲染每个子控件(包括控件和图形元素)。在片段着色器中,对于每个片段,我会查看之前传递的特殊纹理中相同坐标的像素。如果特殊纹理中的像素为白色,则可以渲染此片段,因为它在可见区域内。
你认为这个方法可行吗?这是一个好主意还是有更好的方法?
我的第一个想法是使用"裁剪测试",在搜索网页时发现了它。但问题是,我只能使用矩形裁剪,而我希望能够在任意区域(如星形多边形)内进行裁剪。
我有一个想法...
当绘制控件及其图形元素时,我查看该控件是否需要裁剪其内容。如果是,我将其以统一的白色颜色绘制在黑色背景的离屏纹理中。然后我将其发送到着色器程序中。因此,我使用激活的着色器程序渲染每个子控件(包括控件和图形元素)。在片段着色器中,对于每个片段,我会查看之前传递的特殊纹理中相同坐标的像素。如果特殊纹理中的像素为白色,则可以渲染此片段,因为它在可见区域内。
你认为这个方法可行吗?这是一个好主意还是有更好的方法?