Saga3D API Documentation  1.0-RC4
IVideoDriver.h
Go to the documentation of this file.
1 #ifndef __I_VIDEO_DRIVER_H_INCLUDED__
2 #define __I_VIDEO_DRIVER_H_INCLUDED__
3 
4 #include "SRenderPass.h"
5 #include "SPipeline.h"
6 #include "SShaderUniform.h"
7 #include "SPushConstant.h"
8 #include "SShaderBuffer.h"
9 #include "SIndirectBuffer.h"
10 #include "ISceneNode.h"
11 #include <vector>
12 #include <string>
13 #include <glm/vec2.hpp>
14 
15 namespace saga
16 {
17 
18 class SagaDevice;
19 
20 namespace scene
21 {
22  class IMeshBuffer;
23  class ISceneManager;
24  class IMeshSceneNode;
25 }
26 
27 namespace video
28 {
29 
31 
33  {
35  FRAME_BUFFER= 0,
56  };
57 
59  enum class E_FOG_TYPE
60  {
61  EXP,
62  LINEAR,
63  EXP2
64  };
65 
66  enum class E_SHADER_TYPE;
67 
69  {
70  public:
71  virtual const std::string& getVendorName() const = 0;
72 
73  virtual void begin() = 0;
74  virtual void beginPass(RenderPassHandle pass) = 0;
75  virtual void draw() = 0;
76  virtual void submit() = 0;
77  virtual void present(TextureHandle texture = NULL_GPU_RESOURCE_HANDLE) = 0;
78  virtual void endPass() = 0;
79  virtual void end() = 0;
80 
81  virtual void setPersistence(const SGPUResource::HandleType resource, const bool persistence = true) = 0;
82  virtual void resetPersistence() = 0;
83  virtual void clear() = 0;
84 
85  #ifdef SAGA_EXTRA_API_MEMORY_INFO
86  virtual std::uint64_t getTotalMemory() const = 0;
87  virtual std::uint64_t getAllocatedMemory() const = 0;
88  #endif
89 
90  virtual void enqueuePass(const RenderPassHandle pass) = 0;
91  virtual void render() = 0;
92 
93  virtual SRenderPass createRenderPass() const = 0;
95  virtual SRenderPass& getRenderPass(const RenderPassHandle pass) = 0;
96  virtual void destroyRenderPass(const RenderPassHandle pass) = 0;
97 
98  virtual SPipeline createPipeline() const = 0;
99  virtual SGPUResource::HandleType createResource(SPipeline&& pipeline) = 0;
100  virtual SPipeline& getPipeline(const PipelineHandle p) = 0;
101  virtual void destroyPipeline(const PipelineHandle p) = 0;
102 
103  virtual void bindComputePipeline(const PipelineHandle& compute) = 0;
104  virtual void dispatchComputePipeline(std::uint32_t x, std::uint32_t y, uint32_t z) = 0;
105 
106  virtual STexture createTexture() = 0;
107  virtual void loadTexture(STexture& texture, const int face, const int level, const std::string& path) const = 0;
108  virtual void loadTexture(STexture& texture, const int face, const int level,
109  const unsigned char* data, const size_t size) const = 0;
110 
111  virtual TextureHandle createTexture(STexture&& texture) = 0;
112  virtual TextureHandle createTexture(const std::string& path, const E_PIXEL_FORMAT format = E_PIXEL_FORMAT::RGBA8) = 0;
113  virtual TextureHandle createTexture(unsigned char* fileData, const std::size_t size, const E_PIXEL_FORMAT format = E_PIXEL_FORMAT::RGBA8) = 0;
114  virtual TextureHandle createTexture(unsigned char* pixelData, const int width, const int height, const E_PIXEL_FORMAT format = E_PIXEL_FORMAT::RGBA8) = 0;
115  virtual void bindTexture(TextureHandle texture, const int binding) = 0;
116 
117  virtual STexture& getTexture(const TextureHandle texture) = 0;
118  virtual STexture& getTextureByID(const ID id) = 0;
119  virtual void destroyTexture(const TextureHandle texture) = 0;
120 
121  virtual SShader createShader() const = 0;
122  virtual ShaderHandle createResource(SShader&& shader) = 0;
123  virtual SShader& getShader(const ShaderHandle shader) = 0;
124  virtual void destroyShader(const ShaderHandle shader) = 0;
125 
126  virtual SShaderUniform createShaderUniform() const = 0;
127  virtual ShaderUniformHandle createResource(SShaderUniform&& shader) = 0;
128  virtual SShaderUniform& getShaderUniform(const ShaderUniformHandle uniform) = 0;
129  virtual void destroyShaderUniform(const ShaderUniformHandle uniform) = 0;
130 
131  virtual void updateShaderUniform(const ShaderUniformHandle uniform, const void* data) = 0;
132  virtual void bindShaderUniform(const ShaderUniformHandle uniform, const int binding) = 0;
133 
134  virtual SPushConstant createPushConstant() const = 0;
136  virtual SPushConstant& getPushConstant(const PushConstantHandle con) = 0;
137  virtual void destroyPushConstant(const PushConstantHandle con) = 0;
138 
139  virtual void updatePushConstant(const PushConstantHandle con, const void* data, const size_t offset = 0, const size_t size = 0) = 0;
140 
141  virtual SShaderBuffer createShaderBuffer() const = 0;
142  virtual ShaderBufferHandle createResource(SShaderBuffer&& buffer) = 0;
143  virtual SShaderBuffer& getShaderBuffer(const ShaderBufferHandle buffer) = 0;
144  virtual void destroyShaderBuffer(const ShaderBufferHandle buffer) = 0;
145 
146  virtual void updateShaderBuffer(const ShaderBufferHandle buffer, const void* data, const size_t offset = 0, const size_t size = 0) = 0;
147  virtual void bindShaderBuffer(const ShaderBufferHandle buffer, const int binding) = 0;
148 
149  virtual void addShader(SShader& shader, E_SHADER_TYPE type, std::string&& source) const = 0;
150  virtual void addShaderFromFile(SShader& shader, E_SHADER_TYPE type, const std::string& path) const = 0;
151 
154  virtual SIndirectBuffer& getIndirectBuffer(const IndirectBufferHandle buffer) = 0;
155  virtual void destroyIndirectBuffer(const IndirectBufferHandle buffer) = 0;
156 
160  virtual void destroyIndexedIndirectBuffer(const IndexedIndirectBufferHandle buffer) = 0;
161 
162  virtual void* mapBuffer(const ShaderBufferHandle buffer,
163  const std::size_t offset = 0, const std::size_t size = 0) const = 0;
164  virtual void unmapBuffer(const ShaderBufferHandle buffer) const = 0;
165 
166  virtual bool hasPipelineBuffer(const scene::IMeshSceneNode& node, const video::PipelineHandle pipeline) const = 0;
167  virtual void createPipelineBuffer(const scene::IMeshSceneNode& node, const video::PipelineHandle pipeline) = 0;
168  virtual void destroyPipelineBuffer(const scene::ISceneNode& node, bool destroyAll = false) = 0;
169 
171  virtual std::uint32_t getWidth() const = 0;
172 
174  virtual std::uint32_t getHeight() const = 0;
175 
176  virtual void setSceneManager(const std::shared_ptr<scene::ISceneManager>& smgr) = 0;
177 
179 
185  virtual void copyTexture(TextureHandle srcTex, TextureHandle dstTex,
186  const glm::ivec2& srcOffset = {}, const glm::ivec2& dstOffset = {}, const glm::ivec2& size = {}) = 0;
187 
189 
195  virtual void copyTextureToBuffer(TextureHandle srcTex, ShaderBufferHandle dstBuffer,
196  const glm::ivec2& srcOffset = {}, const std::uint64_t dstOffset = 0, const glm::ivec2& size = {}) = 0;
197 
198  virtual void copyFramebufferColorToBuffer(ShaderBufferHandle dstBuffer,
199  const glm::ivec2& srcOffset = {}, const std::uint64_t dstOffset = 0, const glm::ivec2& size = {}) = 0;
200 
201  virtual void copyFramebufferDepthToBuffer(ShaderBufferHandle dstBuffer,
202  const glm::ivec2& srcOffset = {}, const std::uint64_t dstOffset = 0, const glm::ivec2& size = {}) = 0;
203 
205 
211  virtual void blitTexture(TextureHandle srcTex, TextureHandle dstTex,
212  const glm::ivec2& srcOffset = {}, const glm::ivec2& dstOffset = {}) = 0;
213  };
214 
215 } // namespace video
216 } // namespace saga
217 
218 
219 #endif
saga::video::IVideoDriver::enqueuePass
virtual void enqueuePass(const RenderPassHandle pass)=0
saga::video::IVideoDriver::createPushConstant
virtual SPushConstant createPushConstant() const =0
saga::video::IVideoDriver::destroyIndirectBuffer
virtual void destroyIndirectBuffer(const IndirectBufferHandle buffer)=0
saga::video::IVideoDriver::getTexture
virtual STexture & getTexture(const TextureHandle texture)=0
saga::video::IVideoDriver::addShaderFromFile
virtual void addShaderFromFile(SShader &shader, E_SHADER_TYPE type, const std::string &path) const =0
saga::video::IVideoDriver::destroyShader
virtual void destroyShader(const ShaderHandle shader)=0
saga::video::IVideoDriver::setPersistence
virtual void setPersistence(const SGPUResource::HandleType resource, const bool persistence=true)=0
saga::video::NULL_GPU_RESOURCE_HANDLE
constexpr SGPUResource::HandleType NULL_GPU_RESOURCE_HANDLE
Definition: SGPUResource.h:17
saga::video::IVideoDriver::getIndirectBuffer
virtual SIndirectBuffer & getIndirectBuffer(const IndirectBufferHandle buffer)=0
saga::video::IVideoDriver::hasPipelineBuffer
virtual bool hasPipelineBuffer(const scene::IMeshSceneNode &node, const video::PipelineHandle pipeline) const =0
saga::video::IVideoDriver::bindShaderBuffer
virtual void bindShaderBuffer(const ShaderBufferHandle buffer, const int binding)=0
saga::video::IVideoDriver::updateShaderBuffer
virtual void updateShaderBuffer(const ShaderBufferHandle buffer, const void *data, const size_t offset=0, const size_t size=0)=0
saga::video::SPushConstant
Definition: SPushConstant.h:11
saga::video::IVideoDriver::destroyIndexedIndirectBuffer
virtual void destroyIndexedIndirectBuffer(const IndexedIndirectBufferHandle buffer)=0
saga::scene::ISceneNode
Type for list of scene node animators.
Definition: ISceneNode.h:41
saga::video::ShaderHandle
SGPUResource::HandleType ShaderHandle
Definition: SShader.h:22
saga::video::SShaderUniform
Definition: SShaderUniform.h:11
saga::scene::IMeshSceneNode
A scene node displaying a static mesh.
Definition: IMeshSceneNode.h:18
saga::video::SPipeline
Definition: SPipeline.h:15
saga::video::IVideoDriver::getIndexedIndirectBuffer
virtual SIndexedIndirectBuffer & getIndexedIndirectBuffer(const IndexedIndirectBufferHandle buffer)=0
saga::video::IVideoDriver::getPushConstant
virtual SPushConstant & getPushConstant(const PushConstantHandle con)=0
saga::video::IVideoDriver::getShaderBuffer
virtual SShaderBuffer & getShaderBuffer(const ShaderBufferHandle buffer)=0
saga::video::IVideoDriver::copyFramebufferColorToBuffer
virtual void copyFramebufferColorToBuffer(ShaderBufferHandle dstBuffer, const glm::ivec2 &srcOffset={}, const std::uint64_t dstOffset=0, const glm::ivec2 &size={})=0
SShaderUniform.h
saga::video::PipelineHandle
SGPUResource::HandleType PipelineHandle
Definition: SPipeline.h:27
saga::video::IVideoDriver::destroyShaderUniform
virtual void destroyShaderUniform(const ShaderUniformHandle uniform)=0
saga::video::IVideoDriver::dispatchComputePipeline
virtual void dispatchComputePipeline(std::uint32_t x, std::uint32_t y, uint32_t z)=0
saga::video::IVideoDriver::destroyPipeline
virtual void destroyPipeline(const PipelineHandle p)=0
SRenderPass.h
saga::video::E_RENDER_TARGET_TYPE::AUX_BUFFER0
@ AUX_BUFFER0
Auxiliary buffer 0.
saga::video::IVideoDriver::updatePushConstant
virtual void updatePushConstant(const PushConstantHandle con, const void *data, const size_t offset=0, const size_t size=0)=0
saga::video::E_RENDER_TARGET_TYPE::STEREO_LEFT_BUFFER
@ STEREO_LEFT_BUFFER
Render target is the main color frame buffer.
saga::video::IVideoDriver::createShaderBuffer
virtual SShaderBuffer createShaderBuffer() const =0
saga::video::IVideoDriver::getVendorName
virtual const std::string & getVendorName() const =0
saga::video::IVideoDriver::present
virtual void present(TextureHandle texture=NULL_GPU_RESOURCE_HANDLE)=0
saga::video::E_FOG_TYPE::EXP2
@ EXP2
saga::video::IndirectBufferHandle
SGPUResource::HandleType IndirectBufferHandle
Definition: SIndirectBuffer.h:27
saga::video::IVideoDriver::destroyTexture
virtual void destroyTexture(const TextureHandle texture)=0
saga::video::IVideoDriver::getWidth
virtual std::uint32_t getWidth() const =0
Get window's width.
saga::video::IVideoDriver::bindShaderUniform
virtual void bindShaderUniform(const ShaderUniformHandle uniform, const int binding)=0
saga::video::E_RENDER_TARGET_TYPE::STEREO_BOTH_BUFFERS
@ STEREO_BOTH_BUFFERS
Render to both stereo buffers at once.
saga::video::IVideoDriver::loadTexture
virtual void loadTexture(STexture &texture, const int face, const int level, const std::string &path) const =0
ISceneNode.h
saga::video::E_RENDER_TARGET_TYPE
E_RENDER_TARGET_TYPE
Special render targets, which usually map to dedicated hardware.
Definition: IVideoDriver.h:32
saga::video::E_RENDER_TARGET_TYPE::AUX_BUFFER1
@ AUX_BUFFER1
Auxiliary buffer 1.
saga::video::IVideoDriver::destroyRenderPass
virtual void destroyRenderPass(const RenderPassHandle pass)=0
saga::video::IVideoDriver::end
virtual void end()=0
saga::video::IVideoDriver::updateShaderUniform
virtual void updateShaderUniform(const ShaderUniformHandle uniform, const void *data)=0
saga::video::IndexedIndirectBufferHandle
SGPUResource::HandleType IndexedIndirectBufferHandle
Definition: SIndirectBuffer.h:28
SIndirectBuffer.h
saga::video::IVideoDriver::beginPass
virtual void beginPass(RenderPassHandle pass)=0
saga::video::IVideoDriver::createRenderPass
virtual SRenderPass createRenderPass() const =0
saga::ID
std::uint32_t ID
Type for node ID.
Definition: ID.h:11
saga::video::ShaderBufferHandle
SGPUResource::HandleType ShaderBufferHandle
Definition: SShaderBuffer.h:23
saga::video::IVideoDriver::unmapBuffer
virtual void unmapBuffer(const ShaderBufferHandle buffer) const =0
saga::video::IVideoDriver::createIndexedIndirectBuffer
virtual SIndexedIndirectBuffer createIndexedIndirectBuffer()=0
saga::video::IVideoDriver
Definition: IVideoDriver.h:68
saga::video::E_PIXEL_FORMAT::RGBA8
@ RGBA8
Vulkan swapchain format.
saga::video::IVideoDriver::addShader
virtual void addShader(SShader &shader, E_SHADER_TYPE type, std::string &&source) const =0
saga::video::E_FOG_TYPE::EXP
@ EXP
saga::video::TextureHandle
SGPUResource::HandleType TextureHandle
Definition: STexture.h:52
saga::video::E_RENDER_TARGET_TYPE::STEREO_RIGHT_BUFFER
@ STEREO_RIGHT_BUFFER
Render target is the right color buffer (left is the main buffer)
saga::video::SIndirectBuffer
Definition: SIndirectBuffer.h:13
saga::video::E_RENDER_TARGET_TYPE::AUX_BUFFER4
@ AUX_BUFFER4
Auxiliary buffer 4.
saga::video::IVideoDriver::copyFramebufferDepthToBuffer
virtual void copyFramebufferDepthToBuffer(ShaderBufferHandle dstBuffer, const glm::ivec2 &srcOffset={}, const std::uint64_t dstOffset=0, const glm::ivec2 &size={})=0
saga::video::IVideoDriver::createPipeline
virtual SPipeline createPipeline() const =0
saga::video::IVideoDriver::setSceneManager
virtual void setSceneManager(const std::shared_ptr< scene::ISceneManager > &smgr)=0
saga::video::IVideoDriver::clear
virtual void clear()=0
saga::video::IVideoDriver::getShaderUniform
virtual SShaderUniform & getShaderUniform(const ShaderUniformHandle uniform)=0
saga::video::IVideoDriver::destroyShaderBuffer
virtual void destroyShaderBuffer(const ShaderBufferHandle buffer)=0
saga::video::IVideoDriver::draw
virtual void draw()=0
saga::video::IVideoDriver::begin
virtual void begin()=0
saga::video::IVideoDriver::destroyPushConstant
virtual void destroyPushConstant(const PushConstantHandle con)=0
saga::video::E_RENDER_TARGET_TYPE::AUX_BUFFER3
@ AUX_BUFFER3
Auxiliary buffer 3.
saga::video::IVideoDriver::copyTextureToBuffer
virtual void copyTextureToBuffer(TextureHandle srcTex, ShaderBufferHandle dstBuffer, const glm::ivec2 &srcOffset={}, const std::uint64_t dstOffset=0, const glm::ivec2 &size={})=0
Copy texture content a buffer.
saga::video::SGPUResource::HandleType
std::uint32_t HandleType
Definition: SGPUResource.h:13
saga::video::IVideoDriver::getHeight
virtual std::uint32_t getHeight() const =0
Get window's height.
saga::video::IVideoDriver::mapBuffer
virtual void * mapBuffer(const ShaderBufferHandle buffer, const std::size_t offset=0, const std::size_t size=0) const =0
saga::video::IVideoDriver::bindTexture
virtual void bindTexture(TextureHandle texture, const int binding)=0
saga::video::IVideoDriver::createShader
virtual SShader createShader() const =0
saga::video::SIndexedIndirectBuffer
Definition: SIndirectBuffer.h:20
saga::video::E_RENDER_TARGET_TYPE::AUX_BUFFER2
@ AUX_BUFFER2
Auxiliary buffer 2.
saga::video::IVideoDriver::copyTexture
virtual void copyTexture(TextureHandle srcTex, TextureHandle dstTex, const glm::ivec2 &srcOffset={}, const glm::ivec2 &dstOffset={}, const glm::ivec2 &size={})=0
Copy texture content to another texture.
saga::video::IVideoDriver::getShader
virtual SShader & getShader(const ShaderHandle shader)=0
saga::video::E_SHADER_TYPE
E_SHADER_TYPE
Definition: EShaderTypes.h:9
saga::video::E_RENDER_TARGET_TYPE::MULTI_RENDER_TEXTURES
@ MULTI_RENDER_TEXTURES
Multi-Render target textures.
saga::video::IVideoDriver::createPipelineBuffer
virtual void createPipelineBuffer(const scene::IMeshSceneNode &node, const video::PipelineHandle pipeline)=0
saga::video::IVideoDriver::destroyPipelineBuffer
virtual void destroyPipelineBuffer(const scene::ISceneNode &node, bool destroyAll=false)=0
saga::video::IVideoDriver::getRenderPass
virtual SRenderPass & getRenderPass(const RenderPassHandle pass)=0
saga::video::ShaderUniformHandle
SGPUResource::HandleType ShaderUniformHandle
Definition: SShaderUniform.h:16
SPushConstant.h
saga::video::E_FOG_TYPE
E_FOG_TYPE
enum class for the types of fog distributions to choose from
Definition: IVideoDriver.h:59
saga::video::SShader
Definition: SShader.h:14
saga::video::E_PIXEL_FORMAT
E_PIXEL_FORMAT
Enumeration for all primitive types there are.
Definition: EPixelFormat.h:10
saga::video::IVideoDriver::resetPersistence
virtual void resetPersistence()=0
saga::video::SShaderBuffer
Definition: SShaderBuffer.h:11
saga::video::RenderPassHandle
SGPUResource::HandleType RenderPassHandle
Definition: SRenderPass.h:27
saga::video::IVideoDriver::bindComputePipeline
virtual void bindComputePipeline(const PipelineHandle &compute)=0
saga::video::PushConstantHandle
SGPUResource::HandleType PushConstantHandle
Definition: SPushConstant.h:17
saga::video::SRenderPass
Definition: SRenderPass.h:13
SPipeline.h
saga::video::IVideoDriver::getTextureByID
virtual STexture & getTextureByID(const ID id)=0
saga::video::E_RENDER_TARGET_TYPE::RENDER_TEXTURE
@ RENDER_TEXTURE
Render target is a render texture.
saga::video::IVideoDriver::endPass
virtual void endPass()=0
saga::video::IVideoDriver::blitTexture
virtual void blitTexture(TextureHandle srcTex, TextureHandle dstTex, const glm::ivec2 &srcOffset={}, const glm::ivec2 &dstOffset={})=0
Blit texture content to another texture.
SShaderBuffer.h
saga::video::E_FOG_TYPE::LINEAR
@ LINEAR
saga::video::STexture
Definition: STexture.h:28
saga::video::IVideoDriver::createShaderUniform
virtual SShaderUniform createShaderUniform() const =0
saga::video::E_RENDER_TARGET_TYPE::FRAME_BUFFER
@ FRAME_BUFFER
Render target is the main color frame buffer.
saga::video::IVideoDriver::createIndirectBuffer
virtual SIndirectBuffer createIndirectBuffer()=0
saga::video::IVideoDriver::submit
virtual void submit()=0
saga::video::IVideoDriver::getPipeline
virtual SPipeline & getPipeline(const PipelineHandle p)=0
saga
Definition: aabbox3d.h:11
saga::video::IVideoDriver::createResource
virtual SGPUResource::HandleType createResource(SRenderPass &&pass)=0
saga::video::IVideoDriver::render
virtual void render()=0
saga::video::IVideoDriver::createTexture
virtual STexture createTexture()=0