Как я могу получить количество сэмплов каждого пикселя в шейдере? - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь прочитать каждую выборку буфера глубины с несколькими выборками как образ хранилища, который только что сгенерирован моим проходом до z.

Однако передо мной стоят две существенные проблемы:

  1. Сколько сэмплов в каждом пикселе изображения?

    КонечноЯ могу получить это число в приложении, потому что это было то, что я указал, когда был создан буфер глубины с несколькими выборками.

    Но число не указано внутри шейдера.Все, что я знаю, это то, что буфер мультисэмплируется один на Image2DMS prez;

    Поскольку число выборок на тексель устанавливается динамически, я не могу просто объявить его с помощью макроса, подобного #define SAMPLE_PER_TEXAL 16.

    Я просмотрел спецификацию glsl4.5 и не нашел ни одного API, который мог бы получить число.Возможно ли получить это число в шейдере?

  2. Как получить доступ к указанному образцу изображения?

    API loadImage(Image2DMS img, ivec2 P, int sample); может показаться полезным для меня.Тем не менее, третий параметр int sample, который в спецификации называется «номером образца», по-прежнему не определен во всей спецификации.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

OpenGL 4.5 / ARB_shader_texture_image_samples позволяет запрашивать количество выборок в текстуре из GLSL через функцию textureSamples. Вы также можете передать его шейдеру через униформу.

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

gvec imageLoad(gimage2DMS image, ivec2 P, int sample);
0 голосов
/ 17 апреля 2019

Даже если нет функции GLSL, которая может дать вам счетчик сэмплов, так как вы знаете его на стороне клиента, вы можете просто передать его как униформу шейдеру.

По второму вопросу - согласно Wiki :

При доступе к многосэмплированным текстурам функция доступа имеет другой параметр, int, который определяет индекс выборки для чтения из или напишите.

Так что да, использование перегрузки loadImage(Image2DMS img, ivec2 P, int sample) должно "просто работать" с sample = 0,1,2, ... до количества выборок в изображении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...