Это мой первый пост, и я только недавно начал программировать для Android и OpenGl, поэтому будьте добры ко мне:)
Я пишу небольшое приложение, которое будет включать один экран, который будет использоватьизображение в палитре для быстрого изменения цвета.Для скорости я думал, что смогу внедрить систему с помощью шейдера, поэтому у меня есть шейдер, настроенный и работающий на фантастических примерах из руководства по программированию Open GL ES 2.0.Проблема, над которой я бился в течение последних нескольких дней, заключается в способе ссылки на данные моей палитры в шейдере.
Мой шейдер в настоящее время:
precision lowp float;
varying vec2 v_texCoord;
uniform sampler2D s_texture;
uniform int s_palette[204]; // Specify a palette of 64 rgb entries
void main()
{
vec4 col = texture2D( s_texture, v_texCoord );
int index = (int(col.r * 255.0) * 3;
gl_FragColor = vec4(float(s_palette[index]) / 255.0, float(s_palette[index+1]) / 255.0, float(s_palette[index+2]) / 255.0, 1.0);
}
Поработав с этим целую вечность и не углубившись далеко, я обнаружил, что если я буду ссылаться на данные своей палитры по постоянному значению, я могу получить результаты, но не путем обращения к переменной.Поискав некоторое время с Google, я обнаружил, что это было именно так, как это было с GLSL 1.1 и было исправлено с GLSL 1.3.Я считаю, что Android работает на GLSL ES1.0, который основан на GLSL 1.3, поэтому он должен работать, но я не могу заставить его работать.Я не могу найти в спецификациях GLSLES ничего такого, что указывало бы на то, что это также невозможно, поэтому где я ошибаюсь?
Если это просто невозможно, то у кого-нибудь есть другие идеи, как обойти это?этот довольно серьезный недостаток в моем плане?