0
내에서 쉐이더 저장 버퍼 개체를 수정 :은 내가 <em>쉐이더 저장 버퍼</em> (SSBO)에 <em>버텍스 버퍼</em>의 내용을 복사 한 내 기본 프로그램 (C++/OpenGL을 4.5)에서 버텍스 쉐이더
float* buffer = (float*) glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo[2]);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(GLfloat)*size,buffer, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, 0);
glUnmapBuffer(GL_ARRAY_BUFFER);
버텍스 쉐이더에서
이 데이터를 배열에 바인딩 :
#version 430
#extension GL_ARB_shader_storage_buffer_object : require
layout(shared, binding = 3) buffer storage
{
float array[];
}
하지만 난에 배열 항목을 덮어려고 할 때은 다음과 같이 작동합니다.
array[index_in_bounds] = 4.2;
아무 일도 발생하지 않습니다.
내가 뭘 잘못하고 있니? 버텍스 쉐이더 내에서 버퍼를 바꿀 수 있습니까? 이것은 Geometry Shader에서만 가능합니까? 이전에 사용 해본 적이없는 변형 피드백 (Transform Feedback)을해야합니까?
편집 : 내가 데이터가 변경 될 경우 바로보고, 내 메인 프로그램에서 테스트 용 버퍼를 매핑하고 있습니다 :
float* buffer = (float*) glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
float* ssbo = (float*) glMapNamedBuffer(3, GL_READ_ONLY);
for(int i = 0; i < SIZE_OF_BUFFERS; i++)
printf("% 5f | % 5f\n", ssbo[i], buffer[i]);
glUnmapNamedBuffer(3);
glUnmapBuffer(GL_ARRAY_BUFFER);
가 정의를 무언가가 있었는지 여부를 감지하는 코드를 보여줍니다. –
변환을 위해 배열을 사용하고있는 것이 확실합니다. 디버그 출력 코드를 추가했습니다. – Corbie
[mcve]를 게시하십시오. –