Могу ли я изменить буфер вершин в графическом процессоре с помощью шейдера вершин?

#opengl #gpu #shader

Вопрос:

По какой-то причине не могу найти ответ в Интернете. Я хочу обновить атрибуты вершин в графическом процессоре через шейдер в аналогичной форме:

 #version 330 core
layout(location = 0) in vec4 position;

uniform mat4 someTransformation;

void main()
{
    position = position * someTransformation;
    gl_Position = position;
}
 

Возможно ли это?

Комментарии:

1. «Могу ли я изменить буфер вершин в графическом процессоре с помощью шейдера вершин?» — Нет, вы не можете. position является входной переменной. Нет никакой концепции записи вершин обратно в буфер. Однако вы можете использовать обратную связь преобразования для создания новых примитивов.

2. @Rabbid76 спасибо. Это многое проясняет

Ответ №1:

Можете ли вы написать код, который вы написали? Да, это юридический кодекс.

Изменит ли это содержимое любого хранилища GPU? Нет.

Хотя для VS существуют способы прямого управления содержимым буфера, если обрабатываемая область буфера также потенциально используется в качестве массива атрибутов для команды рендеринга, у вас будет неопределенное поведение.

Вы можете использовать SSBOs для управления другим хранилищем, которое не используется в качестве входных данных для рендеринга. И вы можете использовать обратную связь преобразования для накопления данных, полученных в результате обработки вершин. Но вы не можете заставить VS напрямую изменять свой собственный входной массив.