• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The SwiftShader Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef VK_FRAMEBUFFER_HPP_
16 #define VK_FRAMEBUFFER_HPP_
17 
18 #include "VkObject.hpp"
19 
20 namespace vk {
21 
22 class ImageView;
23 class RenderPass;
24 
25 class Framebuffer : public Object<Framebuffer, VkFramebuffer>
26 {
27 public:
28 	Framebuffer(const VkFramebufferCreateInfo *pCreateInfo, void *mem);
29 	void destroy(const VkAllocationCallbacks *pAllocator);
30 
31 	void clear(const RenderPass *renderPass, uint32_t clearValueCount, const VkClearValue *pClearValues, const VkRect2D &renderArea);
32 	void clearAttachment(const RenderPass *renderPass, uint32_t subpassIndex, const VkClearAttachment &attachment, const VkClearRect &rect);
33 
34 	static size_t ComputeRequiredAllocationSize(const VkFramebufferCreateInfo *pCreateInfo);
35 	ImageView *getAttachment(uint32_t index) const;
36 	void resolve(const RenderPass *renderPass, uint32_t subpassIndex);
37 
getExtent() const38 	const VkExtent3D &getExtent() const { return extent; }
39 
40 private:
41 	uint32_t attachmentCount = 0;
42 	ImageView **attachments = nullptr;
43 	const VkExtent3D extent = {};
44 };
45 
Cast(VkFramebuffer object)46 static inline Framebuffer *Cast(VkFramebuffer object)
47 {
48 	return Framebuffer::Cast(object);
49 }
50 
51 }  // namespace vk
52 
53 #endif  // VK_FRAMEBUFFER_HPP_
54