Спасибо за разъяснения, это было далеко от моего первоначального понимания. Обратите внимание, что текстура, которую вы предоставляете OpenGL ES, уже имеет оттенок, поэтому вы запрашиваете изменение существующего оттенка.
Во-первых, позвольте мне ответить на вопрос, как указано:
Давайте начнем с того, что должно произойти с текселями. Поскольку текстуры OpenGL хранятся как RGB, для преобразования оттенка текселя необходимо перейти в режим RGB-> HSL-> применить новый оттенок-> RGB.
Вы можете найти фактическую математику для выполнения RGB-> HSL и обратного преобразования здесь . Как вы хотите выбрать новый оттенок, я полагаю, вам придется заполнить его.
Самый большой вопрос - , когда должно произойти преобразование. Что ж, конвейер OpenGL не позволит вам выполнить такое сложное преобразование при чтении текстуры (в любом случае, не в ES 1.1 - поможет ES 2.0 fragment shaders
, но с высокой стоимостью). Таким образом, вам придется выполнять все преобразования вне конвейера текстурирования GL ES. В зависимости от того, как часто вам нужно менять оттенки, я советую либо делать это автономно (и хранить различные тематические текстуры), либо вычислять новые текстуры для новых оттенков по требованию непосредственно перед их загрузкой в OpenGL ES.
Насколько я знаю, в GL ES 1.1 нет встроенных средств, которые бы помогли сделать это напрямую.
Теперь, делая шаг назад, я не уверен, что мешает вам разделить на 2 текстуры, если вы можете жить с 2 текстурами, применяемыми во время выполнения. Математика, на которую я указывал, отделяет насыщенность от яркости независимо от того, как была сгенерирована текстура (и теоретически, если я правильно понимаю ваш случай, оттенок должен быть постоянным). Делать вычисления в автономном режиме должно быть достаточно легко для любой входной текстуры?