Цвет шейдера WebGL из текстуры sampler2D дает другой результат по сравнению с явно определенным цветом vec4

#glsl #webgl #regl

Вопрос:

Я кодирую значения в цветах в шейдере и получаю некоторые неожиданные результаты. Я довел это до случая, описанного в этой скрипке, когда захват цвета из текстуры (sampler2D) дает другой результат по сравнению с явным указанием того же цвета, что и vec4.

 vec4 c = method1(v_texcoord);//explicitly create color
vec4 px = method2(v_texcoord);//grab color from image

//confirm that these are the same value
if (px!=c) return; 
 

Если мы используем c напрямую, мы получим другой результат по сравнению с тем, если мы используем px — даже если мы только что подтвердили, что они имеют одинаковое значение.

Следующая строка в коде бессмысленна в том смысле, что эти значения равны (только что проверено выше). Но комментирование / раскомментирование этой строки дает другой результат.

 //c = px; //uncomment = red light; comment out = green light
 

Попробуйте это сами в следующей скрипке:

https://jsfiddle.net/9zo5fpd0/31/

Я пробовал разные уровни точности, а также разные способы построения цвета по изображению, но, похоже, единственная разница заключается в том, является ли источником само изображение или нет. Мои знания о внутренней работе графических процессоров, работающих с шейдерным кодом, ограничены, поэтому я понятия не имею, в чем будет заключаться существенная разница в этих 2 методах. Любая помощь будет признательна.