13 std::string prog_name =
"";
17 bool has_indices =
false;
20 bool success = prog.
build_program(ctx, prog_name,
true, defines);
21 prog.allow_context_to_set_color(
false);
29 void destruct(
const context& ctx) {
34 return build_shader_program(ctx, defines);
40 return build_shader_program(ctx, defines);
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.
bool build_program(const context &ctx, const std::string &file_name, bool show_error=false, const shader_define_map &defines=shader_define_map())
successively calls create, attach_program and link.