1 /*************************************************************************/ 2 /* environment.h */ 3 /*************************************************************************/ 4 /* This file is part of: */ 5 /* GODOT ENGINE */ 6 /* https://godotengine.org */ 7 /*************************************************************************/ 8 /* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur. */ 9 /* Copyright (c) 2014-2019 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 #ifndef ENVIRONMENT_H 31 #define ENVIRONMENT_H 32 33 #include "resource.h" 34 #include "servers/visual_server.h" 35 36 class Environment : public Resource { 37 38 OBJ_TYPE(Environment, Resource); 39 40 public: 41 enum BG { 42 43 BG_KEEP = VS::ENV_BG_KEEP, 44 BG_DEFAULT_COLOR = VS::ENV_BG_DEFAULT_COLOR, 45 BG_COLOR = VS::ENV_BG_COLOR, 46 BG_TEXTURE = VS::ENV_BG_TEXTURE, 47 BG_CUBEMAP = VS::ENV_BG_CUBEMAP, 48 BG_CANVAS = VS::ENV_BG_CANVAS, 49 BG_MAX = VS::ENV_BG_MAX 50 }; 51 52 enum BGParam { 53 54 BG_PARAM_CANVAS_MAX_LAYER = VS::ENV_BG_PARAM_CANVAS_MAX_LAYER, 55 BG_PARAM_COLOR = VS::ENV_BG_PARAM_COLOR, 56 BG_PARAM_TEXTURE = VS::ENV_BG_PARAM_TEXTURE, 57 BG_PARAM_CUBEMAP = VS::ENV_BG_PARAM_CUBEMAP, 58 BG_PARAM_ENERGY = VS::ENV_BG_PARAM_ENERGY, 59 BG_PARAM_SCALE = VS::ENV_BG_PARAM_SCALE, 60 BG_PARAM_GLOW = VS::ENV_BG_PARAM_GLOW, 61 BG_PARAM_MAX = VS::ENV_BG_PARAM_MAX 62 }; 63 64 enum Fx { 65 FX_AMBIENT_LIGHT = VS::ENV_FX_AMBIENT_LIGHT, 66 FX_FXAA = VS::ENV_FX_FXAA, 67 FX_GLOW = VS::ENV_FX_GLOW, 68 FX_DOF_BLUR = VS::ENV_FX_DOF_BLUR, 69 FX_HDR = VS::ENV_FX_HDR, 70 FX_FOG = VS::ENV_FX_FOG, 71 FX_BCS = VS::ENV_FX_BCS, 72 FX_SRGB = VS::ENV_FX_SRGB, 73 FX_MAX = VS::ENV_FX_MAX, 74 }; 75 76 enum FxBlurBlendMode { 77 FX_BLUR_BLEND_MODE_ADDITIVE, 78 FX_BLUR_BLEND_MODE_SCREEN, 79 FX_BLUR_BLEND_MODE_SOFTLIGHT, 80 }; 81 82 enum FxHDRToneMapper { 83 FX_HDR_TONE_MAPPER_LINEAR, 84 FX_HDR_TONE_MAPPER_LOG, 85 FX_HDR_TONE_MAPPER_REINHARDT, 86 FX_HDR_TONE_MAPPER_REINHARDT_AUTOWHITE, 87 }; 88 89 enum FxParam { 90 FX_PARAM_AMBIENT_LIGHT_COLOR = VS::ENV_FX_PARAM_AMBIENT_LIGHT_COLOR, 91 FX_PARAM_AMBIENT_LIGHT_ENERGY = VS::ENV_FX_PARAM_AMBIENT_LIGHT_ENERGY, 92 FX_PARAM_GLOW_BLUR_PASSES = VS::ENV_FX_PARAM_GLOW_BLUR_PASSES, 93 FX_PARAM_GLOW_BLUR_SCALE = VS::ENV_FX_PARAM_GLOW_BLUR_SCALE, 94 FX_PARAM_GLOW_BLUR_STRENGTH = VS::ENV_FX_PARAM_GLOW_BLUR_STRENGTH, 95 FX_PARAM_GLOW_BLUR_BLEND_MODE = VS::ENV_FX_PARAM_GLOW_BLUR_BLEND_MODE, 96 FX_PARAM_GLOW_BLOOM = VS::ENV_FX_PARAM_GLOW_BLOOM, 97 FX_PARAM_GLOW_BLOOM_TRESHOLD = VS::ENV_FX_PARAM_GLOW_BLOOM_TRESHOLD, 98 FX_PARAM_DOF_BLUR_PASSES = VS::ENV_FX_PARAM_DOF_BLUR_PASSES, 99 FX_PARAM_DOF_BLUR_BEGIN = VS::ENV_FX_PARAM_DOF_BLUR_BEGIN, 100 FX_PARAM_DOF_BLUR_RANGE = VS::ENV_FX_PARAM_DOF_BLUR_RANGE, 101 FX_PARAM_HDR_EXPOSURE = VS::ENV_FX_PARAM_HDR_EXPOSURE, 102 FX_PARAM_HDR_TONEMAPPER = VS::ENV_FX_PARAM_HDR_TONEMAPPER, 103 FX_PARAM_HDR_WHITE = VS::ENV_FX_PARAM_HDR_WHITE, 104 FX_PARAM_HDR_GLOW_TRESHOLD = VS::ENV_FX_PARAM_HDR_GLOW_TRESHOLD, 105 FX_PARAM_HDR_GLOW_SCALE = VS::ENV_FX_PARAM_HDR_GLOW_SCALE, 106 FX_PARAM_HDR_MIN_LUMINANCE = VS::ENV_FX_PARAM_HDR_MIN_LUMINANCE, 107 FX_PARAM_HDR_MAX_LUMINANCE = VS::ENV_FX_PARAM_HDR_MAX_LUMINANCE, 108 FX_PARAM_HDR_EXPOSURE_ADJUST_SPEED = VS::ENV_FX_PARAM_HDR_EXPOSURE_ADJUST_SPEED, 109 FX_PARAM_FOG_BEGIN = VS::ENV_FX_PARAM_FOG_BEGIN, 110 FX_PARAM_FOG_BEGIN_COLOR = VS::ENV_FX_PARAM_FOG_BEGIN_COLOR, 111 FX_PARAM_FOG_END_COLOR = VS::ENV_FX_PARAM_FOG_END_COLOR, 112 FX_PARAM_FOG_ATTENUATION = VS::ENV_FX_PARAM_FOG_ATTENUATION, 113 FX_PARAM_FOG_BG = VS::ENV_FX_PARAM_FOG_BG, 114 FX_PARAM_BCS_BRIGHTNESS = VS::ENV_FX_PARAM_BCS_BRIGHTNESS, 115 FX_PARAM_BCS_CONTRAST = VS::ENV_FX_PARAM_BCS_CONTRAST, 116 FX_PARAM_BCS_SATURATION = VS::ENV_FX_PARAM_BCS_SATURATION, 117 FX_PARAM_MAX = VS::ENV_FX_PARAM_MAX 118 }; 119 120 private: 121 BG bg_mode; 122 Variant bg_param[BG_PARAM_MAX]; 123 bool fx_enabled[FX_MAX]; 124 Variant fx_param[FX_PARAM_MAX]; 125 RID environment; 126 127 protected: 128 static void _bind_methods(); 129 130 public: 131 void set_background(BG p_bg); 132 BG get_background() const; 133 134 void set_background_param(BGParam p_param, const Variant &p_value); 135 Variant get_background_param(BGParam p_param) const; 136 137 void set_enable_fx(Fx p_effect, bool p_enabled); 138 bool is_fx_enabled(Fx p_effect) const; 139 140 void fx_set_param(FxParam p_param, const Variant &p_value); 141 Variant fx_get_param(FxParam p_param) const; 142 143 virtual RID get_rid() const; 144 145 Environment(); 146 ~Environment(); 147 }; 148 149 VARIANT_ENUM_CAST(Environment::BG); 150 VARIANT_ENUM_CAST(Environment::BGParam); 151 VARIANT_ENUM_CAST(Environment::Fx); 152 VARIANT_ENUM_CAST(Environment::FxParam); 153 154 #endif // ENVIRONMENT_H 155