c++ - glDrawElements() Returning GL_INVALID_ENUM in Invalid Circumstances -
all method below draw_data draw square 2 triangles. hence hard coded values. square renders fine, however, spammed
vertex_renderer::draw_vertex_data()gl error: invalid enum.
from code. doing wrong?
my rendering method follows:
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 defined follows:
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"); this culprit, don't see why causing problem. gl_float valid enum.
gldrawelements has 1 condition under in returns gl_invalid_enum (http://www.opengl.org/sdk/docs/man/xhtml/gldrawelements.xml):
gl_invalid_enum generated if mode not accepted value.
this should make suspicious other calls api since gldrawelements call has valid mode. add more check calls made before , see if track down problem.
Comments
Post a Comment