#pragma once #include namespace PD { struct GfxOpenGL3Config { // Vertex Allocator template using VertexAlloc = std::allocator; // Index Allocator template using IndexAlloc = std::allocator; static constexpr size_t NumVertices = 32768; // 8192*4 static constexpr size_t NumIndices = 49152; // 8192*6 }; class GfxOpenGL3 : public GfxDriverBase { public: GfxOpenGL3() : GfxDriverBase("OpenGL3") {} ~GfxOpenGL3() {} void SysInit() override; void SysDeinit() override; void Submit(size_t count, size_t start) override; void BindTexture(TextureID id) override; void SysReset() override; TextureID LoadTexture(const std::vector& pixels, int w, int h, TextureFormat type = TextureFormat::RGBA32, TextureFilter filter = TextureFilter::Linear) override; void DeleteTexture(const TextureID& tex) override; private: u32 pShader = 0; u32 VBO = 0; u32 IBO = 0; u32 VAO = 0; int pLocTex = 0; int pLocAlfa = 0; int pLocProjection = 0; static const char* pVertCode; static const char* pFragCode; }; } // namespace PD