#pragma once #include "../VISIRenderer.hpp" #include "boo/graphicsdev/glew.h" #include class VISIRendererOpenGL : public VISIRenderer { GLuint m_vtxShader, m_fragShader, m_program, m_uniLoc; GLuint m_uniformBufferGL; GLuint m_aabbIBO; std::array m_frustums; struct ModelBinding { GLuint vbo, ibo, vao; }; struct EntityBinding { GLuint vbo, vao; }; struct LightBinding { GLuint vbo, vao; }; std::vector m_modelBindings; std::vector m_entityBindings; std::vector m_lightBindings; size_t m_queryCount; std::unique_ptr m_queries; std::unique_ptr m_queryBools; bool SetupShaders() override; bool SetupVertexBuffersAndFormats() override; void SetupRenderPass(const zeus::CVector3f& pos) override; public: VISIRendererOpenGL(int argc, const hecl::SystemChar** argv) : VISIRenderer(argc, argv) {} void RenderPVSOpaque(RGBA8* bufOut, bool& needTransparent) override; void RenderPVSTransparent(const std::function& passFunc) override; void RenderPVSEntitiesAndLights(const std::function& passFunc, const std::function& lightPassFunc) override; };