Вот какая проблема. Есть такие шейдеры, которые я напишу ниже. Пока я знаю так как написано, и у меня множество вопросов возникает.
Код
const char *vShaderstr =
"#version 300 es\n"
"layout(location = 0) in vec4 a_color;\n"
"layout(location = 1) in vec2 a_position;\n"
"out vec4 v_color;\n"
"void main()\n"
"{\n"
" v_color = a_color;\n"
" gl_Position = a_position;\n"
"}";
const char *fShaderstr =
"#version 300 es\n"
"precision lowp float;\n"
"in vec4 v_color;\n"
"out vec4 o_fragColor;\n"
"void main()\n"
"{\n"
" o_fragColor = v_color;\n"
"}";
проблема в том, как я думаю, что vec4 это float. А мои данные такие.
Код
glVertexAttribPointer ( 0, 4, GL_UNSIGNED_BYTE, GL_FALSE, 0, pixels );
glVertexAttribPointer ( 1, 2, GL_INT, GL_FALSE, 0, vertices );
glEnableVertexAttribArray ( 0 );
glEnableVertexAttribArray ( 1 );
glDrawArrays ( GL_POINTS, 0, max_draw );
по этому коду видно, что pixels состоит из байтов, четыре цвета на пиксель, то есть rgba, и координаты vertices, которые по x,y, то есть всего две координаты, и не float а int. Думаю в этом коде много проблем. Но как правильно надо?
Так как я разобрался с этим
Код
#if 0
glVertexPointer ( 2, GL_INT, 0, vertices );
glColorPointer ( 4, GL_UNSIGNED_BYTE, 0, pixels );
#endif
мне захотелось узнать больше, и попробывать с помощью шейдеров работать.