13 std::string prog_name =
"";
17 bool has_indices =
false;
19 bool build_shader_program(
const context& ctx) {
20 prog.allow_context_to_set_color(
false);
21 return prog.
build_program(ctx, prog_name, prog_options,
true);
28 void destruct(
const context& ctx) {
33 return build_shader_program(ctx);
37 prog_options = options;
40 return build_shader_program(ctx);
44 assert(prog.
is_created() &&
"generic_renderer::ref_prog shader program is not created; call init before first use");
49 assert(prog.
is_created() &&
"generic_renderer::enable_prog shader program is not created; call init before first use");
55 bool res = geometry.enable(ctx, prog);
60 has_indices = geometry.has_indices();
65 bool res = geometry.disable(ctx);
72 size_t draw_count = geometry.render_count();
73 start = std::min(start, draw_count);
74 draw_count = std::min(start + (count ? count : draw_count), draw_count) - start;
76 GLenum pt = gl::map_to_gl(type);
78 glDrawElements(pt, (GLsizei)draw_count, GL_UNSIGNED_INT, (
void*)(start *
sizeof(
unsigned)));
80 glDrawArrays(pt, (GLint)start, (GLsizei)draw_count);
85 if(!enable(ctx, geometry))
87 draw(ctx, type, geometry, start, count);
88 return disable(ctx, geometry);
base class for all drawables, which is independent of the used rendering API.