Я проверял этот вопрос.
gldrawarrays ничего не рисует => неприменимо, потому что я использую шейдеры.
Мой код выглядит следующим образом:
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
Сначала инициализируется vao.
GLuint vertexBuffer;
glGenBuffers(1,&vertexBuffer);
float vertices[]={
-0.5f,-0.5f,
0.0f,0.0f,
0.5f,0.5f
};
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
Связывает буфер и добавляет данные
const char* vertexSource = reader("./shaders/chapter-one.vert").c_str();
GLuint vShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vShader, 1, &vertexSource, NULL);
glCompileShader(vShader);
GLint vStatus;
glGetShaderiv(vShader, GL_COMPILE_STATUS, &vStatus);
if(vStatus!=GL_TRUE){
printf("Vertex Shader not Compiled\n");
}
char vBuffer[512];
glGetShaderInfoLog(vShader, 512, NULL, vBuffer);
cout<<vBuffer;
const char* fragmentSource = reader("./shaders/chapter-one.frag").c_str();
GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fShader, 1, &fragmentSource, NULL);
glCompileShader(fShader);
GLint fStatus;
glGetShaderiv(fShader, GL_COMPILE_STATUS, &fStatus);
if(fStatus!=GL_TRUE){
printf("Fragment Shader not compiled");
}
char fBuffer[512];
glGetShaderInfoLog(fShader, 512, NULL, fBuffer);
cout << fBuffer;
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vShader);
glAttachShader(shaderProgram, fShader);
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);
Добавляет шейдер и создает программу. Я также получаю ошибки и журналы для каждого шага, которые в настоящее время пусты. Поэтому нет ошибок при компиляции или создании шейдеров и программ.
GLuint posLoc = glGetAttribLocation(shaderProgram, "p");
printf("%i\n", posLoc);
glVertexAttribPointer(posLoc, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(posLoc);
Получает атрибут из шейдера для передачи данных.
glDrawArrays(GL_LINES, 0, 3); // => This part does not work
При вызове glGetError()
после glDrawArrays
Я получаю Ошибка 1282. Я знаю, что glDrawArrays
вызывает эту ошибку, как и раньше glDrawArrays
Я пытался позвонить glGetErrors()
, и ошибок не было. Я думаю, что проблема в настройке где-то
Любые предложения ??
Редактировать: Я пытался изменить свой код в соответствии с предложением Rabbid76, и я все еще получаю ту же ошибку. Я проверил документацию и думаю, что это применимый случай.
GL_INVALID_OPERATION генерируется, если ненулевое имя объекта буфера привязано к включенному массиву и данным объекта буфера Магазин в настоящее время сопоставлен.
Что это значит в этой ситуации и какие изменения я должен внести?
Полный код здесь
Да, я получил оба мой код и пример кода бок о бок и изменили все, что казалось несовместимым. Я изменил оба glDrawElements
и мне пришлось настроить glVertexAttribPointer
. Глупая ошибка. Спасибо.