如果无法加载纹理,则退回到纯色

Fallback to a solid color if texture cannot be loaded

本文关键字:纯色 加载 纹理 如果      更新时间:2023-10-16

我当前的渲染器根据顶点的位置和颜色绘制表单。它还不能处理纹理

struct Form
{
    unsigned int Positions, Colors, Elements, Program;
};

现在我想实现纹理的能力。因为在最终的游戏中不会有没有纹理的形式,但我想替换颜色功能,而不是开发一个附带功能。

所以渲染器现在必须通过顶点的位置和纹理坐标来绘制表单。

struct Form
{
    unsigned int Positions, Coordinates, Elements, Texture, Program;
};

到目前为止,一切顺利。但是如果没有渲染纹理的能力,我的应用程序无法绘制表单,如果它们的图像文件不存在或由于某些原因无法加载。因此,如果图像文件无法加载,我想实现一个退回到给定的纯色(比如粉红色)。

在不完全开发两个并行特性的情况下,我如何实现这种回退?有一个共同的方法吗?我希望这可以在着色器中完成。或者我可以给显卡发送一个粉色纹理然后对所有形式都一视同仁。遗憾的是,我不知道如何实现这一点,或者如果甚至是可能的。

我已经解决了这个问题,通过程序创建一个虚拟检查器纹理,并将其分配给任何没有任何有效纹理的对象。它不是基于顶点颜色或网格颜色,而是有效的。并且不需要更改着色器,只需要几行代码来检查null纹理。

如果从没有纹理绑定的纹理单元中采样,则检索到的样本总是白色的;在没有完整的纹理边界的情况下对纹理进行采样并不是错误。因此,您可以使用白色来调节它的后退色。