1 /*************************************************************************/
2 /*  rasterizer_gles2.h                                                   */
3 /*************************************************************************/
4 /*                       This file is part of:                           */
5 /*                           GODOT ENGINE                                */
6 /*                      https://godotengine.org                          */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */
9 /* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md).   */
10 /*                                                                       */
11 /* Permission is hereby granted, free of charge, to any person obtaining */
12 /* a copy of this software and associated documentation files (the       */
13 /* "Software"), to deal in the Software without restriction, including   */
14 /* without limitation the rights to use, copy, modify, merge, publish,   */
15 /* distribute, sublicense, and/or sell copies of the Software, and to    */
16 /* permit persons to whom the Software is furnished to do so, subject to */
17 /* the following conditions:                                             */
18 /*                                                                       */
19 /* The above copyright notice and this permission notice shall be        */
20 /* included in all copies or substantial portions of the Software.       */
21 /*                                                                       */
22 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
23 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
24 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
25 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
26 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
27 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
28 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
29 /*************************************************************************/
30 
31 #ifndef RASTERIZERGLES2_H
32 #define RASTERIZERGLES2_H
33 
34 #include "rasterizer_canvas_gles2.h"
35 #include "rasterizer_scene_gles2.h"
36 #include "rasterizer_storage_gles2.h"
37 #include "servers/visual/rasterizer.h"
38 
39 class RasterizerGLES2 : public Rasterizer {
40 
41 	static Rasterizer *_create_current();
42 
43 	RasterizerStorageGLES2 *storage;
44 	RasterizerCanvasGLES2 *canvas;
45 	RasterizerSceneGLES2 *scene;
46 
47 	double time_total;
48 	float time_scale;
49 
50 public:
51 	virtual RasterizerStorage *get_storage();
52 	virtual RasterizerCanvas *get_canvas();
53 	virtual RasterizerScene *get_scene();
54 
55 	virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true);
56 	virtual void set_shader_time_scale(float p_scale);
57 
58 	virtual void initialize();
59 	virtual void begin_frame(double frame_step);
60 	virtual void set_current_render_target(RID p_render_target);
61 	virtual void restore_render_target(bool p_3d_was_drawn);
62 	virtual void clear_render_target(const Color &p_color);
63 	virtual void blit_render_target_to_screen(RID p_render_target, const Rect2 &p_screen_rect, int p_screen = 0);
64 	virtual void output_lens_distorted_to_screen(RID p_render_target, const Rect2 &p_screen_rect, float p_k1, float p_k2, const Vector2 &p_eye_center, float p_oversample);
65 	virtual void end_frame(bool p_swap_buffers);
66 	virtual void finalize();
67 
68 	static Error is_viable();
69 	static void make_current();
70 	static void register_config();
71 
is_low_end()72 	virtual bool is_low_end() const { return true; }
73 
74 	RasterizerGLES2();
75 	~RasterizerGLES2();
76 };
77 
78 #endif // RASTERIZERGLES2_H
79