Хотя ответ Никола кажется технически правильным, существует обходной путь. Значение float
имеет более чем достаточную точность для нацеливания пикселя на экран; может просто не хватить, чтобы нацелиться на позицию в «мире» (в данном случае, на фрактал).
Тогда решение состоит в том, чтобы использовать единый буфер для передачи мировых координат для некоторой фиксированной точки относительно экран (в данном случае, центр), а затем вычислить координаты пикселей из этого:
layout(set = 0, binding = 1) uniform Locals {
dvec2 centre;
dvec2 scale;
};
void main() {
dvec2 c = centre + dvec2(cf) * scale;
...
}