Я создаю файтинг на основе спрайтов, и разработка подошла к моменту, когда я хочу реализовать замену цветов изображений во время выполнения (чтобы пользователь мог указать через интерфейс, какой именно цвет должен быть изменен на что, и это будет сделано в одно мгновение, без прерывания экрана загрузки). Я полагал, что это будет довольно легко достигнуто в пиксельном шейдере. Я попробовал это, установив значения для изменения другого цвета, и это сработало довольно хорошо. Для следующего шага я хотел, чтобы он считывал данные из текстового файла (содержащего цветовые коды цвета, который нужно изменить, а затем цвет, на который нужно изменить). Он имеет несколько записей и хранится в таком массиве:
XMFLOAT3 palette[10][2];
А вот соответствующая константная запись в шейдере:
float4 xPalette[10][2];
Это означает, что он хранит 10 цветов для изменения и 10 цветов для их изменения. Я передаю это пиксельному шейдеру через постоянный буфер, и он не работает, как планировалось, потому что распознается только последняя запись массива, а все остальные — нули. Я думаю, это было бы из-за 16-битного выравнивания перед отправкой данных в GPU? Какой другой способ отправки таких данных в пиксельный шейдер? Спасибо, что прочитали это!