0

다시 한번 계산 쉐이더에 문제가 있습니다 ... 계산 쉐이더에 포인터가 들어있는 구조체를 전달하고 싶습니다. 이 내 구조의 예이다 : 나는 다른 초기화의 그러나 성공없이 많은 시도 Compute Shader의 입력 구조체에 대한 포인터

couleurStruct *coul; 
coul = (couleurStruct *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(couleurStruct), bufMask); 
//coul->x = (float *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(float), bufMask); 

coul->r = 0.0; 
coul->g = 1.0; 
coul->b = 0.0; 
coul->a = 1.0; 
coul->x[0] = 0.5; 

glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); 

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, structBuffer); 

... 그래서

하는 방법이 :

여기
struct couleurStruct { 
    float r; 
    float g; 
    float b; 
    float a; 
    float *x; 
}; 

내 SSBO 초기화입니다 필요로하는 모든 메모리를 할당하고 (포인터로 가리키는 각 배열 내부에 필요한 메모리를 알고 있기 때문에) 계산 쉐이더로 전달할 수 있습니까? 또는 계산 쉐이더에 포인터를 전달하는 것이 실제로 불가능합니까?

도움 주셔서 감사합니다.

답변

1

OpenGL의 쉐이더 (해당 Vulkan/D3D) 에 포인터가 없습니다. 가능한 한 가장 중요한 것은 다른 데이터 구조에 색인을 제공하는 것입니다. 따라서 x을 다른 배열의 인덱스로 만들 수 있습니다. 그것이 왜 포인터가되어야하는지 명확하게 알 수는 없지만.

+0

다시 한 번 감사드립니다. 그래서 포인터를 정적 배열로 바꿀 것입니다. 물론 위의 코드는 테스트 코드 일 뿐이며 실제로 작업하고있는 코드는 아닙니다. – bRiocHe

관련 문제