unsigned int OpenGL::Helper::createProgramFromFiles(const char *name) { std::string vertex_name = "data/compiled/shader/"; vertex_name += name; vertex_name += "/vertex.glsl"; std::ifstream file(vertex_name.c_str(), std::ios::binary); file.seekg(0, std::ios::end); std::streamsize size = file.tellg(); file.seekg(0, std::ios::beg); std::vector<char> vertex_buffer(size); if (!file.read(vertex_buffer.data(), size)) { fprintf(stderr, "Failed io operation for vertex shader %s\n", vertex_name.c_str()); return -1; } vertex_buffer.push_back('\0'); file.close(); std::string frag_name = "data/compiled/shader/"; frag_name += name; frag_name += "/fragment.glsl"; std::ifstream file2(frag_name.c_str(), std::ios::binary); file2.seekg(0, std::ios::end); size = file2.tellg(); file2.seekg(0, std::ios::beg); std::vector<char> frag_buffer(size); if (!file2.read(frag_buffer.data(), size)) { fprintf(stderr, "Failed io operation for frag shader %s\n", frag_name.c_str()); return -1; } frag_buffer.push_back('\0'); return createProgramFromMemory(vertex_buffer.data(), frag_buffer.data()); }
void DebugProcessor::draw_all() { assert(my_debug_material != nullptr); if (!my_line_points.empty()) { Mesh mesh; VideoService &vs = core().video_service(); uptr<VideoBuffer> vertex_buffer(new VideoBuffer(vs, VideoBufferUsage::STATIC_DRAW)); uptr<VideoBuffer> color_buffer(new VideoBuffer(vs, VideoBufferUsage::STATIC_DRAW)); vertex_buffer->set_bytes(my_line_points.data(), my_line_points.size() * sizeof(Vec3f)); color_buffer->set_bytes(my_line_colors.data(), my_line_colors.size() * sizeof(Vec3f)); mesh.vertex = std::move(vertex_buffer); mesh.color = std::move(color_buffer); Uniforms &u = vs.get_uniforms(); u.color = Vec3f(1, 1, 1); u.transformations.model = Mat4f(); u.model = Mat4f(); u.mvp = u.transformations.model_view_projection(); RenderContext context = { u, vs }; my_debug_material->material().draw_mesh(context, mesh); } }