draw_data
下面的所有方法都是繪製一個帶有兩個三角形的正方形。因此,硬編碼值。廣場渲染就好,但是,我得到垃圾郵件與glDrawElements()在無效的情況下返回GL_INVALID_ENUM
vertex_renderer::draw_vertex_data()GL ERROR: Invalid enum.
從我的代碼。難道我做錯了什麼?
我的渲染方法如下:
bool draw_data(const GLsizei start_index = 0, GLsizei index_count = 0) {
if (!vbo_id_ || start_index + index_count > index_count_) {
return false;
}
if (index_count == 0) {
index_count = index_count_;
}
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
return !gl_errors::what_errors("vertex_renderer::draw_vertex_data()");
}
gl_errors :: what_errors定義如下:
class gl_errors
{
public:
static bool what_errors(const char * const prefix) {
GLenum errorCode;
bool is_error = false;
while ((errorCode = glGetError()) != GL_NO_ERROR) {
switch (errorCode) {
case(GL_INVALID_ENUM): {
std::cout << prefix << "GL ERROR: Invalid enum." << std::endl;
is_error = true;
}
break;
case(GL_INVALID_VALUE): {
std::cout << prefix << "GL ERROR: Invalid value." << std::endl;
is_error = true;
}
break;
case(GL_INVALID_OPERATION): {
std::cout << prefix << "GL ERROR: Invalid operation." << std::endl;
is_error = true;
}
break;
case(GL_STACK_OVERFLOW): {
std::cout << prefix << "GL ERROR: Stack overflow." << std::endl;
is_error = true;
}
break;
case(GL_STACK_UNDERFLOW): {
std::cout << prefix << "GL ERROR: Stack underflow." << std::endl;
is_error = true;
}
break;
case(GL_OUT_OF_MEMORY): {
std::cout << prefix << "GL ERROR: Out of memory." << std::endl;
is_error = true;
}
break;
}
}
return is_error;
}
};
UPDATE
GLsizei stride = sizeof(verticies_t);
pos_id_ = basic_shader_.get_attribute("position");
glEnableVertexAttribArray(pos_id_);
glVertexAttribPointer(pos_id_, 2, GL_FLOAT, GL_FALSE, stride, 0);
gl_extensions::gl_errors::what_errors("1");
這是罪魁禍首,然而,我不明白爲什麼這會導致問題。 GL_FLOAT是一個有效的枚舉。
在調用'glDrawElements'之前是否有錯誤? – yiding
有,這是一個很好的觀點,讓我仔細檢查,以確保每次通話後我都會檢查錯誤。 –