axmol/cocos/renderer/backend/metal/RenderTargetMTL.h

49 lines
1.4 KiB
C++

#pragma once
#include "../RenderTarget.h"
#include "CommandBufferMTL.h"
CC_BACKEND_BEGIN
class RenderTargetMTL : public RenderTarget
{
public:
struct Attachment {
id<MTLTexture> texture = nil;
int level = 0;
explicit operator bool() const {
return texture != nullptr;
}
};
/*
* generateFBO, false, use for screen framebuffer
*/
RenderTargetMTL(bool defaultRenderTarget);
~RenderTargetMTL();
void bindFrameBuffer() const override;
void unbindFrameBuffer() const override;
void setColorAttachment(ColorAttachment attachment) override;
void setDepthAttachment(TextureBackend* attachment, int level = 0) override;
void setStencilAttachment(TextureBackend* attachment, int level = 0) override;
void applyRenderPassAttachments(const RenderPassDescriptor&, MTLRenderPassDescriptor*) const;
Attachment getColorAttachment(int index) const;
Attachment getDepthAttachment() const;
Attachment getStencilAttachment() const;
PixelFormat getColorAttachmentPixelFormat(int index) const;
PixelFormat getDepthAttachmentPixelFormat() const;
PixelFormat getStencilAttachmentPixelFormat() const;
public:
// "Sidecar" textures used to implement automatic MSAA resolve.
// id<MTLTexture> multisampledColor[MRT::TARGET_COUNT] = { 0 };
// id<MTLTexture> multisampledDepth = nil;
// MetalContext*, DeviceMTL*
};
CC_BACKEND_END