2018-10-06 20:36:44 -07:00
|
|
|
#pragma once
|
2017-12-05 19:20:59 -08:00
|
|
|
#if BOO_HAS_GL
|
2015-10-28 21:44:38 -07:00
|
|
|
|
2019-08-19 16:08:54 -07:00
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
#include "boo/BooObject.hpp"
|
|
|
|
#include "boo/graphicsdev/IGraphicsCommandQueue.hpp"
|
|
|
|
#include "boo/graphicsdev/IGraphicsDataFactory.hpp"
|
2015-10-28 21:44:38 -07:00
|
|
|
|
2018-12-07 21:17:51 -08:00
|
|
|
namespace boo {
|
2017-11-04 23:12:49 -07:00
|
|
|
struct BaseGraphicsData;
|
2015-10-28 21:44:38 -07:00
|
|
|
|
2018-12-07 21:17:51 -08:00
|
|
|
struct GLContext {
|
|
|
|
uint32_t m_sampleCount = 1;
|
|
|
|
uint32_t m_anisotropy = 1;
|
|
|
|
bool m_deepColor = false;
|
2018-01-06 21:17:14 -08:00
|
|
|
};
|
|
|
|
|
2018-12-07 21:17:51 -08:00
|
|
|
class GLDataFactory : public IGraphicsDataFactory {
|
2015-10-28 21:44:38 -07:00
|
|
|
public:
|
2018-12-07 21:17:51 -08:00
|
|
|
class Context final : public IGraphicsDataFactory::Context {
|
|
|
|
friend class GLDataFactoryImpl;
|
|
|
|
GLDataFactory& m_parent;
|
|
|
|
ObjToken<BaseGraphicsData> m_data;
|
|
|
|
Context(GLDataFactory& parent __BooTraceArgs);
|
|
|
|
~Context();
|
|
|
|
|
|
|
|
public:
|
2019-08-12 17:52:20 -07:00
|
|
|
Platform platform() const override { return Platform::OpenGL; }
|
2021-06-22 14:21:21 -07:00
|
|
|
const char* platformName() const override { return "OpenGL"; }
|
2018-12-07 21:17:51 -08:00
|
|
|
|
2019-08-12 17:52:20 -07:00
|
|
|
ObjToken<IGraphicsBufferS> newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) override;
|
|
|
|
ObjToken<IGraphicsBufferD> newDynamicBuffer(BufferUse use, size_t stride, size_t count) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
|
|
|
|
ObjToken<ITextureS> newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt,
|
2019-08-12 17:52:20 -07:00
|
|
|
TextureClampMode clampMode, const void* data, size_t sz) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
ObjToken<ITextureSA> newStaticArrayTexture(size_t width, size_t height, size_t layers, size_t mips,
|
|
|
|
TextureFormat fmt, TextureClampMode clampMode, const void* data,
|
2019-08-12 17:52:20 -07:00
|
|
|
size_t sz) override;
|
|
|
|
ObjToken<ITextureD> newDynamicTexture(size_t width, size_t height, TextureFormat fmt,
|
|
|
|
TextureClampMode clampMode) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
ObjToken<ITextureR> newRenderTexture(size_t width, size_t height, TextureClampMode clampMode,
|
2019-08-12 17:52:20 -07:00
|
|
|
size_t colorBindingCount, size_t depthBindingCount) override;
|
|
|
|
ObjToken<ITextureCubeR> newCubeRenderTexture(size_t width, size_t mips) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
|
2019-08-12 17:52:20 -07:00
|
|
|
ObjToken<IShaderStage> newShaderStage(const uint8_t* data, size_t size, PipelineStage stage) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
|
|
|
|
ObjToken<IShaderPipeline> newShaderPipeline(ObjToken<IShaderStage> vertex, ObjToken<IShaderStage> fragment,
|
|
|
|
ObjToken<IShaderStage> geometry, ObjToken<IShaderStage> control,
|
|
|
|
ObjToken<IShaderStage> evaluation, const VertexFormatInfo& vtxFmt,
|
2019-08-12 17:52:20 -07:00
|
|
|
const AdditionalPipelineInfo& additionalInfo,
|
|
|
|
bool asynchronous = true) override;
|
|
|
|
|
|
|
|
ObjToken<IShaderDataBinding>
|
|
|
|
newShaderDataBinding(const ObjToken<IShaderPipeline>& pipeline, const ObjToken<IGraphicsBuffer>& vbo,
|
|
|
|
const ObjToken<IGraphicsBuffer>& instVbo, const ObjToken<IGraphicsBuffer>& ibo,
|
|
|
|
size_t ubufCount, const ObjToken<IGraphicsBuffer>* ubufs, const PipelineStage* ubufStages,
|
|
|
|
const size_t* ubufOffs, const size_t* ubufSizes, size_t texCount,
|
|
|
|
const ObjToken<ITexture>* texs, const int* texBindIdx, const bool* depthBind,
|
|
|
|
size_t baseVert = 0, size_t baseInst = 0) override;
|
2018-12-07 21:17:51 -08:00
|
|
|
};
|
2015-10-28 21:44:38 -07:00
|
|
|
};
|
|
|
|
|
2018-12-07 21:17:51 -08:00
|
|
|
} // namespace boo
|
2015-10-28 21:44:38 -07:00
|
|
|
|
2017-12-05 19:20:59 -08:00
|
|
|
#endif
|