Хотя я не знаком с расширением текстуры палитры, я все же рекомендую использовать фрагментный шейдер для такого рода эффекта. Заменить цветовую клавишу с помощью шейдера почти тривиально, в отличие от других методов, которые вы упомянули, и это будет намного быстрее, чем написание функциональности палитры самостоятельно.
Вот пример фрагментного шейдера GLSL, который заменит белый цвет в текстуре для любого переданного цвета.
uniform vec4 fvReplaceColor;
uniform sampler2D baseMap;
varying vec2 Texcoord;
void main( void )
{
vec4 fvBaseColor = texture2D( baseMap, Texcoord);
if(fvBaseColor == vec4(1.0, 1.0, 1.0, 1.0))
fvBaseColor = fvReplaceColor;
gl_FragColor = fvBaseColor;
}
Да, для настройки шейдера требуется немного больше, но, похоже, вы пытаетесь это сделать, я чувствую, что это лучший подход.