У меня есть своеобразный SSBO только с int, который мне нужно читать и писать как из шейдеров, так и из процессора.
Я создал указанный SSBO следующим образом:
glGenBuffers(1, &ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glObjectLabel(GL_BUFFER, ssbo, -1, ("\"SSBO\""));
GLint zero = 0;
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(GLint), &zero, GL_STATIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo);
Когда я выполняю рендеринг, glDbeugMessage возвращается с:
OpenGL Event Notification:
Source: GL_DEBUG_SOURCE_API
Type: GL_DEBUG_TYPE_PERFORMANCE
ID: Unkown error code: 131186
Severity: GL_DEBUG_SEVERITY_MEDIUM
Message:
Buffer performance warning: Buffer object "SSBO" (bound to
GL_SHADER_STORAGE_BUFFER, and GL_SHADER_STORAGE_BUFFER (3), usage hint is
GL_DYNAMIC_DRAW) is being copied/moved from VIDEO memory to HOST memory.
Самым важным в этом предупреждении является тот факт, что в SSBO есть подсказка: GL_DYNAMIC_DRAW
несмотря на мою попытку установить подсказку как: GL_STATIC_COPY
Итак, мой вопрос: какой совет я должен использовать, чтобы предотвратить предупреждение OpenGL, и как я на самом деле применяю этот совет для использования?