#pragma once #if BOO_HAS_GL #include #include "boo/BooObject.hpp" #include "boo/graphicsdev/IGraphicsCommandQueue.hpp" #include "boo/graphicsdev/IGraphicsDataFactory.hpp" namespace boo { struct BaseGraphicsData; struct GLContext { uint32_t m_sampleCount = 1; uint32_t m_anisotropy = 1; bool m_deepColor = false; }; class GLDataFactory : public IGraphicsDataFactory { public: class Context final : public IGraphicsDataFactory::Context { friend class GLDataFactoryImpl; GLDataFactory& m_parent; ObjToken m_data; Context(GLDataFactory& parent __BooTraceArgs); ~Context(); public: Platform platform() const override { return Platform::OpenGL; } const char* platformName() const override { return "OpenGL"; } ObjToken newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) override; ObjToken newDynamicBuffer(BufferUse use, size_t stride, size_t count) override; ObjToken newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, TextureClampMode clampMode, const void* data, size_t sz) override; ObjToken newStaticArrayTexture(size_t width, size_t height, size_t layers, size_t mips, TextureFormat fmt, TextureClampMode clampMode, const void* data, size_t sz) override; ObjToken newDynamicTexture(size_t width, size_t height, TextureFormat fmt, TextureClampMode clampMode) override; ObjToken newRenderTexture(size_t width, size_t height, TextureClampMode clampMode, size_t colorBindingCount, size_t depthBindingCount) override; ObjToken newCubeRenderTexture(size_t width, size_t mips) override; ObjToken newShaderStage(const uint8_t* data, size_t size, PipelineStage stage) override; ObjToken newShaderPipeline(ObjToken vertex, ObjToken fragment, ObjToken geometry, ObjToken control, ObjToken evaluation, const VertexFormatInfo& vtxFmt, const AdditionalPipelineInfo& additionalInfo, bool asynchronous = true) override; ObjToken newShaderDataBinding(const ObjToken& pipeline, const ObjToken& vbo, const ObjToken& instVbo, const ObjToken& ibo, size_t ubufCount, const ObjToken* ubufs, const PipelineStage* ubufStages, const size_t* ubufOffs, const size_t* ubufSizes, size_t texCount, const ObjToken* texs, const int* texBindIdx, const bool* depthBind, size_t baseVert = 0, size_t baseInst = 0) override; }; }; } // namespace boo #endif