GLSL: гладкий двойной в - PullRequest
       9

GLSL: гладкий двойной в

2 голосов
/ 25 февраля 2020

Я хотел бы сделать это:

layout(location = 0) in dvec2 c;

Но, очевидно, я не могу:

$ glslc mandlebrot.frag
mandlebrot.frag:7: error: 'double' : must be qualified as flat in

Однако мне требуется, чтобы этот вход был интерполирован, а не flat . Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Нет :

Фрагментные шейдерные входные данные, которые являются или содержат целочисленные типы или типы с плавающей запятой двойной точности, должны иметь квалификатор интерполяции flat.

Так что вам придется их сделать float с.

0 голосов
/ 03 марта 2020

Хотя ответ Никола кажется технически правильным, существует обходной путь. Значение float имеет более чем достаточную точность для нацеливания пикселя на экран; может просто не хватить, чтобы нацелиться на позицию в «мире» (в данном случае, на фрактал).

Тогда решение состоит в том, чтобы использовать единый буфер для передачи мировых координат для некоторой фиксированной точки относительно экран (в данном случае, центр), а затем вычислить координаты пикселей из этого:

layout(set = 0, binding = 1) uniform Locals {
    dvec2 centre;
    dvec2 scale;
};

void main() {
    dvec2 c = centre + dvec2(cf) * scale;
    ...
}
...