Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
| @@ -91,8 +91,10 @@ public: | |||
| CairoImage& operator=(const CairoImage& image) noexcept; | |||
| // FIXME this should not be needed | |||
| inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format) | |||
| inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format = kImageFormatBGRA) | |||
| { loadFromMemory(rawData, Size<uint>(w, h), format); }; | |||
| inline void draw(const GraphicsContext& context) | |||
| { drawAt(context, Point<int>(0, 0)); }; | |||
| inline void drawAt(const GraphicsContext& context, int x, int y) | |||
| { drawAt(context, Point<int>(x, y)); }; | |||
| @@ -17,7 +17,7 @@ | |||
| #ifndef DGL_VULKAN_HPP_INCLUDED | |||
| #define DGL_VULKAN_HPP_INCLUDED | |||
| #include "Base.hpp" | |||
| #include "ImageBase.hpp" | |||
| #include <vulkan/vulkan_core.h> | |||
| @@ -34,6 +34,70 @@ struct VulkanGraphicsContext : GraphicsContext | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| /** | |||
| Vulkan Image class. | |||
| TODO ... | |||
| */ | |||
| class VulkanImage : public ImageBase | |||
| { | |||
| public: | |||
| /** | |||
| Constructor for a null Image. | |||
| */ | |||
| VulkanImage(); | |||
| /** | |||
| Constructor using raw image data. | |||
| @note @a rawData must remain valid for the lifetime of this Image. | |||
| */ | |||
| VulkanImage(const char* rawData, uint width, uint height, ImageFormat format); | |||
| /** | |||
| Constructor using raw image data. | |||
| @note @a rawData must remain valid for the lifetime of this Image. | |||
| */ | |||
| VulkanImage(const char* rawData, const Size<uint>& size, ImageFormat format); | |||
| /** | |||
| Constructor using another image data. | |||
| */ | |||
| VulkanImage(const VulkanImage& image); | |||
| /** | |||
| Destructor. | |||
| */ | |||
| ~VulkanImage() override; | |||
| /** | |||
| Load image data from memory. | |||
| @note @a rawData must remain valid for the lifetime of this Image. | |||
| */ | |||
| void loadFromMemory(const char* rawData, | |||
| const Size<uint>& size, | |||
| ImageFormat format = kImageFormatBGRA) noexcept override; | |||
| /** | |||
| Draw this image at position @a pos using the graphics context @a context. | |||
| */ | |||
| void drawAt(const GraphicsContext& context, const Point<int>& pos) override; | |||
| /** | |||
| TODO document this. | |||
| */ | |||
| VulkanImage& operator=(const VulkanImage& image) noexcept; | |||
| // FIXME this should not be needed | |||
| inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format = kImageFormatBGRA) | |||
| { loadFromMemory(rawData, Size<uint>(w, h), format); }; | |||
| inline void draw(const GraphicsContext& context) | |||
| { drawAt(context, Point<int>(0, 0)); }; | |||
| inline void drawAt(const GraphicsContext& context, int x, int y) | |||
| { drawAt(context, Point<int>(x, y)); }; | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| END_NAMESPACE_DGL | |||
| #endif | |||
| @@ -164,6 +164,40 @@ template class Rectangle<uint>; | |||
| template class Rectangle<short>; | |||
| template class Rectangle<ushort>; | |||
| // ----------------------------------------------------------------------- | |||
| // VulkanImage | |||
| VulkanImage::VulkanImage() | |||
| : ImageBase() {} | |||
| VulkanImage::VulkanImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) | |||
| : ImageBase(rawData, width, height, format) {} | |||
| VulkanImage::VulkanImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) | |||
| : ImageBase(rawData, size, format) {} | |||
| VulkanImage::VulkanImage(const VulkanImage& image) | |||
| : ImageBase(image.rawData, image.size, image.format) {} | |||
| VulkanImage::~VulkanImage() {} | |||
| void VulkanImage::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept | |||
| { | |||
| ImageBase::loadFromMemory(rdata, s, fmt); | |||
| } | |||
| void VulkanImage::drawAt(const GraphicsContext&, const Point<int>&) | |||
| { | |||
| } | |||
| VulkanImage& VulkanImage::operator=(const VulkanImage& image) noexcept | |||
| { | |||
| rawData = image.rawData; | |||
| size = image.size; | |||
| format = image.format; | |||
| return *this; | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| void SubWidget::PrivateData::display(const uint width, const uint height, const double autoScaleFactor) | |||
| @@ -35,6 +35,10 @@ typedef DGL_NAMESPACE::CairoImage DemoImage; | |||
| #include "../dgl/OpenGL.hpp" | |||
| typedef DGL_NAMESPACE::OpenGLImage DemoImage; | |||
| #endif | |||
| #ifdef DGL_VULKAN | |||
| #include "../dgl/Vulkan.hpp" | |||
| typedef DGL_NAMESPACE::VulkanImage DemoImage; | |||
| #endif | |||
| START_NAMESPACE_DGL | |||
| @@ -245,6 +249,9 @@ public: | |||
| #ifdef DGL_OPENGL | |||
| static constexpr const char* const kExampleWidgetName = "Demo - OpenGL"; | |||
| #endif | |||
| #ifdef DGL_VULKAN | |||
| static constexpr const char* const kExampleWidgetName = "Demo - Vulkan"; | |||
| #endif | |||
| DemoWindow(Application& app) | |||
| : StandaloneWindow(app), | |||
| @@ -27,6 +27,7 @@ TESTS += Demo.opengl | |||
| WTESTS += Window.opengl | |||
| endif | |||
| ifeq ($(HAVE_VULKAN),true) | |||
| TESTS += Demo.vulkan | |||
| WTESTS = Window.vulkan | |||
| endif | |||