Я создал объект буфера хранения шейдера, чтобы передать информацию моему вершинному шейдеру. Он привязан к буферу, содержащему одну структуру. Но есть проблема. Данные, которые я храню в этой структуре, представляют собой не простой массив, а std::vector
.
Вот структура:
typedef struct {
glm::mat4 modelMatrix;
} entityInfo;
typedef struct {
std::vector<entityInfo> entityInfoBuffer;
} shaderData;
mat4 - это просто матрица с плавающей запятой 4x4.
Если я отдам это в OpenGL, данные, передаваемые на GPU, будут просто кучей указателей и инфы о матрице/векторе, а не данных в них.
Одним из решений было бы создание структуры только для OpenGL:
typedef struct {
float* modelMatrix;
} SSBOentityInfo;
typedef struct {
SSBOentityInfo* entityInfoBuffer;
} SSBOshaderData;
Но мне пришлось бы копировать eeeeevery указатели, соответствующие данным контейнеров.
Есть ли лучший способ сделать это?
entityInfoBuffer
в GPU? Вы не хотите копировать указатели CPU на GPU, они ничего не будут значить для GPU (с таким же успехом вы можете копировать случайные числа). - person user253751   schedule 28.07.2016entityInfoBuffer.data()
в SSBOshaderDataentityInfoBuffer
? Кроме того, OpenGL сможет читать только&mat4[0][0]
. - person Talesseed   schedule 28.07.2016