Как использовать SSBO для обновления данных в шейдере и их чтения из приложения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать SSBO для обновления данных в шейдере и их чтения из приложения?

Сообщение Anonymous »

Я создаю алгоритм трассировки лучей с помощью сеток. Я хочу иметь возможность определять, пересекалась ли сетка с лучом мыши, и возвращать информацию клиенту. Я пытался использовать SSBO, но не смог найти четких примеров этого конкретного варианта использования.
Мой инициализатор SSBO:

Код: Выделить всё

GLuint ssbo = 0;
glGenBuffers(1, &ssbo);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, 4 * sizeof(float), NULL, GL_DYNAMIC_DRAW);
< /code>
my рендеринг цикл: < /p>
...
auto ray_dir = convert_mouse_coords_to_world();
auto& d_shader = ShaderPool::get_shader(ShaderProgram::DEFAULT);
d_shader->use();
glUniform3fv(glGetUniformLocation(d_shader->get_id(), "ray_dir"), 1, ray_dir.data());
Camera::use(d_shader);

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, ssbo);

mesh.render(d_shader);

GLfloat* ptr = (GLfloat*)glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_READ_ONLY);
memcpy(picked, ptr, 4 * sizeof(float));
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79388320/how-to-use-a-ssbo-to-update-data-in-shader-and-reading-it-back-from-the-app[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»