#ifndef RT_EXP_MESHLET_RENDERER_H #define RT_EXP_MESHLET_RENDERER_H #include "runtime/runtime.h" #include "meshlet_generator.hpp" #include struct shader { static shader CompileSource(const char *vert_src, const char *frag_src); static shader CompileSource(const char *compute_src); static shader CompileFile(const char *compute_path); RT_INLINE bool IsValid() const { return m_prog != 0; } RT_INLINE void Use() const { glUseProgram(m_prog); } GLuint m_prog; }; struct meshlet_renderer { struct settings { bool separate_rendering = true; float scale = 1.f; float rotation = 0.f; float eye[3]; float target[3]; float fov; }; rt_result Initialize(); void RenderFlat(const meshlet *meshlets, unsigned int count); void SettingMenu(); private: void SeparateRendering(const meshlet *meshlets, unsigned int count); void DrawIndirectFlat(const meshlet *meshlets, unsigned int count); public: settings m_settings; shader m_single_meshlet_shader; shader m_flat_cull_shader; shader m_meshlet_shader; float m_aspect; }; #endif