in winrt/lib/drawing/CanvasSwapChain.h [101:231]
class CanvasSwapChain : RESOURCE_WRAPPER_RUNTIME_CLASS(
IDXGISwapChain1,
CanvasSwapChain,
ICanvasSwapChain,
ICanvasResourceCreator,
ICanvasResourceCreatorWithDpi,
CloakedIid<ICanvasResourceWrapperWithDevice>,
CloakedIid<ICanvasResourceWrapperWithDpi>)
{
InspectableClass(RuntimeClass_Microsoft_Graphics_Canvas_CanvasSwapChain, BaseTrust);
ClosablePtr<ICanvasDevice> m_device;
bool m_isCoreWindowSwapChain;
float m_dpi;
std::shared_ptr<CanvasSwapChainAdapter> m_adapter;
std::shared_ptr<bool> m_hasActiveDrawingSession;
public:
static DirectXPixelFormat const DefaultPixelFormat = PIXEL_FORMAT(B8G8R8A8UIntNormalized);
static int32_t const DefaultBufferCount = 2;
static CanvasAlphaMode const DefaultCompositionAlphaMode = CanvasAlphaMode::Premultiplied;
static CanvasAlphaMode const DefaultCoreWindowAlphaMode = CanvasAlphaMode::Ignore;
static ComPtr<CanvasSwapChain> CreateNew(
ICanvasDevice* device,
float width,
float height,
float dpi,
DirectXPixelFormat format,
int32_t bufferCount,
CanvasAlphaMode alphaMode);
static ComPtr<CanvasSwapChain> CreateNew(
ICanvasDevice* device,
ICoreWindow* coreWindow,
float dpi);
static ComPtr<CanvasSwapChain> CreateNew(
ICanvasDevice* device,
ICoreWindow* coreWindow,
float width,
float height,
float dpi,
DirectXPixelFormat format,
int32_t bufferCount);
CanvasSwapChain(
ICanvasDevice* device,
IDXGISwapChain1* dxgiSwapChain,
float dpi,
bool isCoreWindowSwapChain);
CanvasSwapChain(
ICanvasDevice* device,
IDXGISwapChain1* dxgiSwapChain,
float dpi);
IFACEMETHOD(CreateDrawingSession)(
Color clearColor,
ICanvasDrawingSession** drawingSession) override;
// ICanvasSwapChain
IFACEMETHOD(get_Device)(ICanvasDevice** value) override;
IFACEMETHOD(get_Size)(Size* value) override;
IFACEMETHOD(get_SizeInPixels)(BitmapSize* value) override;
IFACEMETHOD(get_Dpi)(float* value) override;
IFACEMETHOD(get_Format)(DirectXPixelFormat* value) override;
IFACEMETHOD(get_BufferCount)(int32_t* value) override;
IFACEMETHOD(get_AlphaMode)(CanvasAlphaMode* value) override;
IFACEMETHOD(get_Rotation)(CanvasSwapChainRotation* value) override;
IFACEMETHOD(put_Rotation)(CanvasSwapChainRotation value) override;
IFACEMETHOD(get_SourceSize)(Size* value) override;
IFACEMETHOD(put_SourceSize)(Size value) override;
IFACEMETHOD(get_TransformMatrix)(Matrix3x2* value) override;
IFACEMETHOD(put_TransformMatrix)(Matrix3x2 value) override;
IFACEMETHODIMP ConvertPixelsToDips(int pixels, float* dips) override;
IFACEMETHODIMP ConvertDipsToPixels(float dips, CanvasDpiRounding dpiRounding, int* pixels) override;
IFACEMETHOD(Present)() override;
IFACEMETHOD(PresentWithSyncInterval)(int32_t syncInterval) override;
IFACEMETHOD(ResizeBuffersWithSize)(
Size newSize) override;
IFACEMETHOD(ResizeBuffersWithWidthAndHeight)(
float newWidth,
float newHeight) override;
IFACEMETHOD(ResizeBuffersWithWidthAndHeightAndDpi)(
float newWidth,
float newHeight,
float newDpi) override;
IFACEMETHOD(ResizeBuffersWithAllOptions)(
float newWidth,
float newHeight,
float newDpi,
DirectXPixelFormat newFormat,
int32_t bufferCount) override;
IFACEMETHOD(WaitForVerticalBlank)() override;
// IClosable
IFACEMETHOD(Close)() override;
private:
D2DResourceLock GetResourceLock();
DXGI_SWAP_CHAIN_DESC1 GetSwapChainDesc(D2DResourceLock const& lock);
DXGI_MATRIX_3X2_F GetMatrixInternal(
D2DResourceLock const& lock,
ComPtr<IDXGISwapChain2> const& swapChain);
void SetMatrixInternal(
D2DResourceLock const& lock,
ComPtr<IDXGISwapChain2> const& resource,
DXGI_MATRIX_3X2_F* transform);
void ResizeBuffersImpl(
D2DResourceLock const& lock,
float newWidth,
float newHeight,
float newDpi,
DirectXPixelFormat newFormat,
int32_t bufferCount);
};