OpenGL 4.5 Shader - Повреждают ли мои входные буферы друг друга? - PullRequest
0 голосов
/ 03 марта 2019

У меня проблема с настройкой двух буферов для моих шейдеров.Я хотел использовать Compute Shader, но проблема уже начинается в Vertex Shader.

Что я хочу : два отдельных SSBO с частицами внутри, которые я могу вращать и перемещать по отдельности.

Как я хочу начать : Просто поместите начальные значения в VAO, скопируйте их в SSBO в вершинном шейдере и обработайте их в компьютерных шейдерах.

Проблема : Оба VAO созданы одинаково, а значения равны.Однако, когда я хочу скопировать значения в SSBO, разрывы VAO и только 512 значений (что составляет половину количества элементов) являются правильными, а другие частично имеют странные разные значения, что я вижу из RenderDoc.

Взгляните на мое приложение1021 *

#version 460

#extension GL_ARB_separate_shader_objects : enable

#define WORK_GROUP_SIZE 128

layout (local_size_x = WORK_GROUP_SIZE) in;

// ---- UNIFORM ---------------------------------
layout(std430, binding = 6) buffer grid_vortex1_block
{
    vec4 gridVortex1[];
};

layout(std430, binding = 7) buffer grid_vortex2_block
{
    vec2 gridVortex2[];
};
void main()
{
    uint INDEX = gl_GlobalInvocationID.x;

// THIS OPERATION SCREWS UP EVERYTHING IN THE BUFFER, as you can see in pic3
    gridVortex1[INDEX].xy += 0.2f;
    gridVortex1[INDEX].xy -= 0.2f;

}

Следующие два изображения показывают результат.Во-первых, правильная сетка (например, вихрь 1, еще не вращается), во-вторых, половина исчезает после одного кадра для вихря 2.

Спасибо за вашу помощь.

vortex1 vortex2

...