Всем привет!
Собственно, сабж.
Вот код шейдеров и то, как туда передаются данные:
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 все работает как надо, но хочется снизить размер передаваемых данных.
ЧЯДНТ?



