Linux в очередной раз меня подвел.
На моем ноуте HP450 стоит карточка Intel HD Graphics 4000. Информация о чипсете и драйверах:
Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
Kernel driver in use: i915
Kernel modules: i915
filename: /lib/modules/4.9.0-4-amd64/kernel/drivers/gpu/drm/i915/i915.ko
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
author: Tungsten Graphics, Inc.
vermagic: 4.9.0-4-amd64
Так вот, наткнулся я на проблему в шейдерах GLSL локально в Bonzomatic, а потом увидел ее же в браузере в ShaderToy. Проблема в том, что функция atan() выдает дикую дичь.
Ссылка на пример: https://www.shadertoy.com/view/NljSzV
В телеграмканале «Newskool demomakers' chat» мне подтвердили, что на карточках других производителей такой проблемы не наблюдается.
Вначале думал, что проблема аппаратная. Но заморочился и на этом же оборудовании запустил Windows. И что я вижу? Все прекрасно работает, atan() считается как положено.
Пока что сделал workaround через арксинус, хорошо что хоть он вычисляется правильно:
float arctangens(float a)
{
return asin(a/sqrt(1.0+a*a));
}
Но вообще прошу владельцев Intel-серии заглянуть по вышеуказанной ссылке и сказать, как двигается верхняя линия, с указанием модели своей карты и версии драйвера. Если atan() считается правильно, то линия должна плавно двигаться справа-налево. Если неправильно, то будет двигаться в разные стороны, иногда пропадать с экрана.
Возможно, в более новых модулях ядра эту проблему пофиксили. Но перед тем как заморачиваться с обновленем системы, хотелось бы понять, как обстоят дела с более свежими дровами.