Мой текущий рендерер рисует формы по положению и цвету их вершин. Он еще не может обрабатывать текстуры.
struct Form
{
unsigned int Positions, Colors, Elements, Program;
};
Теперь я хочу реализовать возможность текстур. Поскольку в финальной игре не будет форм без текстуры, а будут цвета, я хочу заменить цветную функцию вместо разработки дополнительной.
Таким образом, рендерер теперь должен рисовать формы по позиции и текстурной координате их вершин.
struct Form
{
unsigned int Positions, Coordinates, Elements, Texture, Program;
};
Все идет нормально. Но без возможности рендеринга без текстуры мое приложение не может рисовать формы, если их файл изображения не существует или по какой-либо причине не может быть загружен. Поэтому я хочу реализовать откат к заданному сплошному цвету (скажем, розовому), если файл изображения не может быть загружен.
Как я могу реализовать этот запасной вариант без полной разработки двух дополнительных функций? Есть ли общий подход? Я хотел бы, чтобы это можно было сделать в шейдере. Или, может быть, я мог бы отправить розовую текстуру на видеокарту, а затем обработать все формы как равные. К сожалению, я понятия не имею, как реализовать это, или если это вообще возможно.
Если вы производите выборку из текстурного блока, к которому не привязана ни одна текстура, полученные выборки всегда получаются белыми; выборка текстуры без ошибок не является ошибкой. Следовательно, вы можете использовать этот белый для модуляции его запасным цветом.
Я решил эту проблему, создавая фиктивную текстуру проверки и назначая ее любому объекту, который не имеет допустимой текстуры. Он не основан на цвете вершины или цвете сетки, но работает. И никаких изменений шейдера не требуется, всего несколько строк кода для проверки нулевых текстур.