1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 
4 #pragma once
5 
6 #include "window.h"
7 #include <climits>
8 
9 class renderer_bgfx;
10 class bgfx_target;
11 
12 class bgfx_view {
13 public:
bgfx_view(renderer_bgfx * renderer,uint32_t index,bgfx_target * backbuffer,std::vector<uint32_t> & seen_views)14 	bgfx_view(renderer_bgfx *renderer, uint32_t index, bgfx_target *backbuffer, std::vector<uint32_t> &seen_views)
15 		: m_renderer(renderer)
16 		, m_index(index)
17 		, m_backbuffer(backbuffer)
18 		, m_seen_views(seen_views)
19 		, m_window_index(UINT_MAX)
20 		, m_view_width(0)
21 		, m_view_height(0)
22 		, m_z_near(0.0f)
23 		, m_z_far(100.0f)
24 		, m_clear_color(0)
25 		, m_clear_depth(1.0f)
26 		, m_clear_stencil(0)
27 		, m_do_clear_color(true)
28 		, m_do_clear_depth(true)
29 		, m_do_clear_stencil(false) {
30 	}
~bgfx_view()31 	virtual ~bgfx_view() { }
32 
33 	void update();
34 
set_backbuffer(bgfx_target * backbuffer)35 	void set_backbuffer(bgfx_target *backbuffer) { m_backbuffer = backbuffer; }
set_index(uint32_t index)36 	void set_index(uint32_t index) { m_index = index; }
get_index()37 	uint32_t get_index() const { return m_index; }
38 
39 	virtual void setup() = 0;
40 	virtual void setup_matrices() = 0;
41 
42 protected:
43 	renderer_bgfx *m_renderer;
44 	uint32_t m_index;
45 	bgfx_target *m_backbuffer;
46 	std::vector<uint32_t> &m_seen_views;
47 
48 	uint32_t m_window_index;
49 	uint32_t m_view_width;
50 	uint32_t m_view_height;
51 	float m_z_near;
52 	float m_z_far;
53 
54 	uint32_t m_clear_color;
55 	float m_clear_depth;
56 	uint8_t m_clear_stencil;
57 
58 	bool m_do_clear_color;
59 	bool m_do_clear_depth;
60 	bool m_do_clear_stencil;
61 };
62 
63 class bgfx_ortho_view : public bgfx_view {
64 public:
bgfx_ortho_view(renderer_bgfx * renderer,uint32_t index,bgfx_target * backbuffer,std::vector<uint32_t> & seen_views)65 	bgfx_ortho_view(renderer_bgfx *renderer, uint32_t index, bgfx_target *backbuffer, std::vector<uint32_t> &seen_views) : bgfx_view(renderer, index, backbuffer, seen_views) { }
66 
67 	void setup() override;
68 	void setup_matrices() override;
69 };
70