Я создал объект буфера хранения шейдера, чтобы предоставить информацию моему шейдеру вершин. Он связан с буфером, содержащим единую структуру. Но есть проблема. Данные, хранящиеся в этой структуре, не являются простым массивом, это std::vector
.Предоставление контейнеров C++ для OpenGL?
Вот структура:
typedef struct {
glm::mat4 modelMatrix;
} entityInfo;
typedef struct {
std::vector<entityInfo> entityInfoBuffer;
} shaderData;
mat4 только простая матрица 4х4 поплавка.
Если я дам это OpenGL, данные, переданные на GPU, будут просто связкой указателей и информации о матрице/векторе, а не данными в них.
Одним из решений было бы создать структуру только для OpenGL:
typedef struct {
float* modelMatrix;
} SSBOentityInfo;
typedef struct {
SSBOentityInfo* entityInfoBuffer;
} SSBOshaderData;
Но я бы скопировать eeeeevery указатель, соответствующий данным контейнеров.
Есть ли лучший способ сделать это?
Не хотите ли вы просто отправить содержимое 'entityInfoBuffer' на GPU? Вы не хотите копировать указатели ЦП на графический процессор, они ничего не означают для GPU (вы также можете копировать случайные числа). – immibis
Я думаю, что при использовании объекта буфера хранения шейдеров вы должны использовать structs? Я не прав ? Это означало бы, что мне пришлось бы установить 'entityInfoBuffer.data()' в SSBOshaderData 'entityInfoBuffer'? Также OpenGL сможет читать '& mat4 [0] [0]'. – Talesseed
@Talesseed: «* вы должны использовать структуры?» «Почему? Данные - это данные, память - это память, а объекты буфера - объекты буфера. –