#ifndef RENDERER_H #define RENDERER_H #include #include "math/vector.h" #include "o3d/tri.h" #include "o3d/tri_deriv.h" namespace engine { using math::Vector3, o3d::Triangle; template class Renderer { public: FrameBuffer fb; template Renderer(FBArg&& fb); void resize(unsigned int w, unsigned int h); void clear(); void draw_triangle(const Triangle& triangle); constexpr unsigned int width() const & { return fb.width(); } constexpr unsigned int height() const & { return fb.height(); } private: std::vector depth_buf; void _draw_cropped_triangle(const o3d::Triangle& root, const o3d::TriangleDerived& triangle); }; } #endif // RENDERER_H