yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

master
1.5 KiB52 linesraw
1// metal-swap-chain.h
2#pragma once
3
4#include "metal-base.h"
5#include "metal-command-queue.h"
6#include "metal-device.h"
7#include "metal-texture.h"
8
9namespace gfx
10{
11
12using namespace Slang;
13
14namespace metal
15{
16
17class SwapchainImpl : public ISwapchain, public ComObject
18{
19public:
20    SLANG_COM_OBJECT_IUNKNOWN_ALL
21    ISwapchain* getInterface(const Guid& guid);
22
23public:
24    RefPtr<DeviceImpl> m_device;
25    ISwapchain::Desc m_desc;
26    WindowHandle m_windowHandle;
27    CA::MetalLayer* m_metalLayer = nullptr;
28    ShortList<RefPtr<TextureResourceImpl>> m_images;
29    NS::SharedPtr<CA::MetalDrawable> m_currentDrawable;
30    Index m_currentImageIndex = -1;
31    MTL::PixelFormat m_metalFormat = MTL::PixelFormat::PixelFormatInvalid;
32
33    void getWindowSize(int& widthOut, int& heightOut) const;
34    void createImages();
35
36public:
37    ~SwapchainImpl();
38
39    Result init(DeviceImpl* device, const ISwapchain::Desc& desc, WindowHandle window);
40
41    virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override { return m_desc; }
42    virtual SLANG_NO_THROW Result SLANG_MCALL
43    getImage(GfxIndex index, ITextureResource** outResource) override;
44    virtual SLANG_NO_THROW Result SLANG_MCALL resize(GfxCount width, GfxCount height) override;
45    virtual SLANG_NO_THROW Result SLANG_MCALL present() override;
46    virtual SLANG_NO_THROW int SLANG_MCALL acquireNextImage() override;
47    virtual SLANG_NO_THROW bool SLANG_MCALL isOccluded() override { return false; }
48    virtual SLANG_NO_THROW Result SLANG_MCALL setFullScreenMode(bool mode) override;
49};
50
51} // namespace metal
52} // namespace gfx