1/*
2 * Copyright (c) 2010-2017 OTClient <https://github.com/edubart/otclient>
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22
23#ifndef FRAMEBUFFER_H
24#define FRAMEBUFFER_H
25
26#include "declarations.h"
27#include "texture.h"
28
29class FrameBuffer : public stdext::shared_object
30{
31public:
32 FrameBuffer(bool withDepth = false);
33
34protected:
35 friend class FrameBufferManager;
36
37public:
38 virtual ~FrameBuffer();
39
40 void resize(const Size& size);
41 void bind(const FrameBufferPtr& depthFramebuffer = nullptr);
42 void release();
43 void draw();
44 void draw(const Rect& dest);
45 void draw(const Rect& dest, const Rect& src);
46
47 void setSmooth(bool enabled);
48
49 TexturePtr getTexture() { return m_texture; }
50 Size getSize();
51 bool isSmooth() { return m_smooth; }
52
53#ifdef WITH_DEPTH_BUFFER
54 uint getDepthRenderBuffer() { return m_depthRbo; }
55 bool hasDepth() { return m_depth; }
56#endif
57
58 std::vector<uint32_t> readPixels();
59
60 void doScreenshot(std::string fileName);
61
62private:
63 void internalCreate();
64 void internalBind();
65 void internalRelease();
66
67 TexturePtr m_texture;
68 TexturePtr m_screenBackup;
69 Size m_oldViewportSize;
70 uint m_fbo;
71 uint m_prevBoundFbo;
72 bool m_smooth = true;
73
74#ifdef WITH_DEPTH_BUFFER
75 uint m_depthRbo = 0;
76 bool m_depth = false;
77#endif
78
79 static uint boundFbo;
80};
81
82#endif