Всем привет!
Собственно, сабж.
Вот код шейдеров и то, как туда передаются данные:
const char *vertexShaderSource ="#version 420 core\n"
"layout (location = 0) in vec4 aPos;\n"
"layout (location = 1) in vec4 aColor;\n"
"out vec4 ourColor;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.xyz, 1.0);\n"
" gl_PointSize = aPos.w;\n"
" ourColor = aColor.rgba;\n"
"}\0";
const char *fragmentShaderSource = "#version 420 core\n"
"out vec4 FragColor;\n"
"in vec4 ourColor;\n"
"void main()\n"
"{\n"
" vec2 circCoord = 2.0 * gl_PointCoord - 1.0;\n"
" if (dot(circCoord, circCoord) > 1.0) {\n"
" discard;\n"
" }\n"
" FragColor = ourColor;\n"
"}\n\0";
//---- usage: ----
struct point
{
uint64_t id;
float x;
float y;
float z;
float size;
uint32_t color;
/*float r;
float g;
float b;
float a;*/
};
// bla-bla-bla
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// position attribute
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(point), (void*)(sizeof(uint64_t)));
glEnableVertexAttribArray(0);
// color attribute
glVertexAttribIPointer(1, 4, GL_UNSIGNED_BYTE, sizeof(point), (void*)(sizeof(uint64_t) + 4 * sizeof(float)));
glEnableVertexAttribArray(1);
При этом я проверил, что при передаче компонент цвета как float все работает как надо, но хочется снизить размер передаваемых данных.
ЧЯДНТ?