Example #1
0
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());
}
Example #2
0
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);
  }
}