내 버텍스 쉐이더에 정보를 제공하기 위해 쉐이더 저장 버퍼 객체를 만들었습니다. 단일 구조체를 포함하는 버퍼에 바인딩됩니다. 그러나 문제가 있습니다. 이 구조에서 유지하는 데이터는 간단한 배열이 아니며 std::vector
입니다. 여기 OpenGL에 C++ 컨테이너를 제공 하시겠습니까?
typedef struct {
glm::mat4 modelMatrix;
} entityInfo;
typedef struct {
std::vector<entityInfo> entityInfoBuffer;
} shaderData;
mat4는 단순한 4 × 4 플로트 행렬이다.
이것을 OpenGL에 제공하면 GPU로 전송되는 데이터는 행렬/벡터에 대한 포인터 및 정보 일 뿐이며 데이터는 아닙니다.
typedef struct {
float* modelMatrix;
} SSBOentityInfo;
typedef struct {
SSBOentityInfo* entityInfoBuffer;
} SSBOshaderData;
하지만 컨테이너의 데이터에 해당하는 eeeeevery 포인터를 복사 할 것 :
하나 개의 솔루션은 OpenGL을위한 단지 구조를 생성하는 것입니다.
더 좋은 방법이 있습니까?
'entityInfoBuffer'의 내용을 GPU에 보내지 않으시겠습니까? CPU 포인터를 GPU에 복사하고 싶지는 않습니다. GPU에 아무런 의미가 없습니다 (임의의 숫자를 복사하는 것일 수도 있습니다). – immibis
나는 셰이더 저장 버퍼 객체를 사용할 때 구조체를 사용해야한다고 생각하니? 나는 틀린가? 그것은'entityInfoBuffer.data()'를 SSBOshaderData'entityInfoBuffer'에 설정해야한다는 것을 의미할까요? 또한 OpenGL은'& mat4 [0] [0]'만 읽을 수 있습니다. – Talesseed
@ Talesseed : "구조체를 사용해야합니까? *"이유가 무엇입니까? 데이터는 데이터이고 메모리는 메모리이며 버퍼 객체는 버퍼 객체입니다. –