//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// #pragma once #include "BsVulkanPrerequisites.h" #include "BsRenderAPI.h" namespace BansheeEngine { /** @addtogroup Vulkan * @{ */ /** Implementation of a render system using Vulkan. Provides abstracted access to various low level Vulkan methods. */ class VulkanRenderAPI : public RenderAPICore { public: VulkanRenderAPI(); ~VulkanRenderAPI(); /** @copydoc RenderAPICore::getName */ const StringID& getName() const override; /** @copydoc RenderAPICore::getShadingLanguageName */ const String& getShadingLanguageName() const override; /** @copydoc RenderAPICore::setGraphicsPipeline */ void setGraphicsPipeline(const SPtr& pipelineState, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setComputePipeline */ void setComputePipeline(const SPtr& computeProgram, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setGpuParams */ void setGpuParams(const SPtr& gpuParams, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::beginFrame */ void beginFrame(const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::endFrame */ void endFrame(const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::clearRenderTarget */ void clearRenderTarget(UINT32 buffers, const Color& color = Color::Black, float depth = 1.0f, UINT16 stencil = 0, UINT8 targetMask = 0xFF, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::clearViewport */ void clearViewport(UINT32 buffers, const Color& color = Color::Black, float depth = 1.0f, UINT16 stencil = 0, UINT8 targetMask = 0xFF, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setRenderTarget */ void setRenderTarget(const SPtr& target, bool readOnlyDepthStencil = false, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setViewport */ void setViewport(const Rect2& area, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setScissorRect */ void setScissorRect(UINT32 left, UINT32 top, UINT32 right, UINT32 bottom, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setStencilRef */ void setStencilRef(UINT32 value, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setVertexBuffers */ void setVertexBuffers(UINT32 index, SPtr* buffers, UINT32 numBuffers, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setIndexBuffer */ void setIndexBuffer(const SPtr& buffer, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setVertexDeclaration */ void setVertexDeclaration(const SPtr& vertexDeclaration, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::setDrawOperation */ void setDrawOperation(DrawOperationType op, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::draw */ void draw(UINT32 vertexOffset, UINT32 vertexCount, UINT32 instanceCount = 0, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::drawIndexed */ void drawIndexed(UINT32 startIndex, UINT32 indexCount, UINT32 vertexOffset, UINT32 vertexCount, UINT32 instanceCount = 0, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::dispatchCompute */ void dispatchCompute(UINT32 numGroupsX, UINT32 numGroupsY = 1, UINT32 numGroupsZ = 1, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::swapBuffers() */ void swapBuffers(const SPtr& target, const SPtr& commandBuffer = nullptr) override; /** @copydoc RenderAPICore::addCommands() */ void addCommands(const SPtr& commandBuffer, const SPtr& secondary) override; /** @copydoc RenderAPICore::executeCommands() */ void executeCommands(const SPtr& commandBuffer) override; /** @copydoc RenderAPICore::convertProjectionMatrix */ void convertProjectionMatrix(const Matrix4& matrix, Matrix4& dest) override; /** @copydoc RenderAPICore::getAPIInfo */ const RenderAPIInfo& getAPIInfo() const override; /** @copydoc RenderAPICore::generateParamBlockDesc() */ GpuParamBlockDesc generateParamBlockDesc(const String& name, Vector& params) override; protected: friend class VulkanRenderAPIFactory; /** @copydoc RenderAPICore::initializePrepare */ void initializePrepare() override; /** @copydoc RenderAPICore::initializeFinalize */ void initializeFinalize(const SPtr& primaryWindow) override; /** @copydoc RenderAPICore::destroyCore */ void destroyCore() override; private: }; /** @} */ }