2
일부 입자를 쉐이더 저장 버퍼에 저장하고 싶습니다. glMapBufferRange() 함수를 사용하여 입자 값을 설정했지만이 함수가 호출 될 때마다 항상 액세스 위반 오류가 발생합니다.glMapBufferRange 액세스 위반
glGenBuffers(1, &bufferID);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, bufferID);
glBufferData(GL_SHADER_STORAGE_BUFFER, numParticles*sizeof(Particle), NULL ,GL_STATIC_DRAW);
struct Particle* particles = (struct Particle*) glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, numParticles*sizeof(Particle), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
for(int i = 0; i < numParticles; ++i){
//.. Do something with particles..//
}
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
대신 glMapBuffer()를 사용하면 모든 것이 정상적으로 작동합니다. 나는 이미 glfw로 OpenGL 컨텍스트를 생성하고 glew를 올바르게 초기화했는지 확인했습니다.
glMapBufferRange가 어떤 이유로 NULL을 반환하지 않았습니까? – Sergey
위의 코드에서 모든 오류 검사를 포함하지 않았지만 glMapBufferRange() 호출 바로 다음에 NULL 포인터가 있는지 확인합니다. 불행히도 그 실행은 지금까지 오지 않습니다. 항상 glMapBufferRange()에서 멈 춥니 다. – Stan
glMapBufferRange를 GL_SHADER_STORAGE가 아닌 다른 대상 유형으로 사용할 수 있습니까? 원래 ARB 확장자 인 SHADER_STORAGE가 glMapBufferRange가 아닌 glMapBuffer만으로 지정되었지만 OpenGL-4.3에만 추가되었습니다. 특히 OpenGL-4.3을 사용하는 경우 드라이버가 약간 버그가있는 경우 놀라지 않을 것입니다. 여전히 아주 새로운. – datenwolf