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

时间:2013-01-03 15:28:53

标签: c++ opengl drawing textures fallback

我当前的渲染器通过顶点的位置和颜色绘制表单。它还无法处理纹理。

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

现在我想实现纹理的功能。由于在最终游戏中没有没有纹理的形式而是颜色,我想要替换颜色特征而不是开发旁边的特征。

因此渲染器现在必须通过顶点的位置和纹理坐标绘制表格。

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

到目前为止,这么好。但如果没有纹理渲染,我的应用程序无法绘制表单,如果它们的图像文件不存在或由于某种原因无法加载。因此,如果无法加载图像文件,我想实现对给定纯色(如粉红色)的回退。

如果不完全开发两个功能,我怎么能实现这个后备?有共同的方法吗?我希望这可以在着色器中完成。或者也许我可以将粉红色的纹理发送到视频卡,然后将所有形式视为相同。可悲的是,我不知道如何实现,或者甚至可能。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

如果您从未绑定纹理的纹理单元进行采样,则检索到的样本总是呈现白色;从没有完整纹理边界的纹理中采样不是错误。因此,您可以使用该白色来使用后备颜色对其进行调制。