OSDN Git Service

* Added graphics options Floater
[radegast/radegast.git] / Radegast / GUI / Rendering / GraphicsPreferences.cs
1 // 
2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2011, Radegast Development Team
4 // All rights reserved.
5 // 
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // 
9 //     * Redistributions of source code must retain the above copyright notice,
10 //       this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above copyright
12 //       notice, this list of conditions and the following disclaimer in the
13 //       documentation and/or other materials provided with the distribution.
14 //     * Neither the name of the application "Radegast", nor the names of its
15 //       contributors may be used to endorse or promote products derived from
16 //       this software without specific prior written permission.
17 // 
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 //
29 // $Id$
30 //
31
32 using System;
33 using System.Collections.Generic;
34 using System.ComponentModel;
35 using System.Drawing;
36 using System.Data;
37 using System.Linq;
38 using System.Text;
39 using System.Windows.Forms;
40 using OpenMetaverse;
41
42 namespace Radegast.Rendering
43 {
44     public partial class GraphicsPreferences : UserControl
45     {
46         RadegastInstance Instance;
47         GridClient Client { get { return Instance.Client; } }
48         SceneWindow Window
49         {
50             get
51             {
52                 if (Instance.TabConsole.TabExists("scene_window"))
53                 {
54                     return (SceneWindow)Instance.TabConsole.Tabs["scene_window"].Control;
55                 }
56                 return null;
57             }
58         }
59
60         public GraphicsPreferences()
61         {
62             InitializeComponent();
63         }
64
65         public GraphicsPreferences(RadegastInstance instance)
66         {
67             this.Instance = instance;
68             InitializeComponent();
69             Disposed += new EventHandler(GraphicsPreferences_Disposed);
70
71             Text = "Graphics preferences";
72             cbAA.Checked = instance.GlobalSettings["use_multi_sampling"];
73             tbDrawDistance.Value = Utils.Clamp(Instance.GlobalSettings["draw_distance"].AsInteger(),
74                 tbDrawDistance.Minimum, tbDrawDistance.Maximum);
75             lblDrawDistance.Text = string.Format("Draw distance: {0}", tbDrawDistance.Value);
76             cbWaterReflections.Enabled = RenderSettings.HasMultiTexturing && RenderSettings.HasShaders;
77             if (cbWaterReflections.Enabled)
78             {
79                 cbWaterReflections.Checked = instance.GlobalSettings["water_reflections"];
80             }
81             cbOcclusionCulling.Checked = Instance.GlobalSettings["rendering_occlusion_culling_enabled"];
82             cbShiny.Checked = Instance.GlobalSettings["scene_viewer_shiny"];
83         }
84
85         void GraphicsPreferences_Disposed(object sender, EventArgs e)
86         {
87         }
88
89         private void chkWireFrame_CheckedChanged(object sender, EventArgs e)
90         {
91             Instance.GlobalSettings["render_wireframe"] = chkWireFrame.Checked;
92
93             if (Window != null)
94             {
95                 Window.Wireframe = chkWireFrame.Checked;
96             }
97         }
98
99         private void cbAA_CheckedChanged(object sender, EventArgs e)
100         {
101             Instance.GlobalSettings["use_multi_sampling"] = cbAA.Checked;
102         }
103
104         private void tbDrawDistance_Scroll(object sender, EventArgs e)
105         {
106             lblDrawDistance.Text = string.Format("Draw distance: {0}", tbDrawDistance.Value);
107             Instance.GlobalSettings["draw_distance"] = tbDrawDistance.Value;
108
109             if (Client != null)
110             {
111                 Client.Self.Movement.Camera.Far = tbDrawDistance.Value;
112             }
113
114             if (Window != null)
115             {
116                 Window.DrawDistance = (float)tbDrawDistance.Value;
117                 Window.UpdateCamera();
118             }
119         }
120
121         private void cbWaterReflections_CheckedChanged(object sender, EventArgs e)
122         {
123             Instance.GlobalSettings["water_reflections"] = cbWaterReflections.Checked;
124
125             if (Window != null)
126             {
127                 if (RenderSettings.HasMultiTexturing && RenderSettings.HasShaders)
128                 {
129                     RenderSettings.WaterReflections = cbWaterReflections.Checked;
130                 }
131             }
132         }
133
134         private void cbOcclusionCulling_CheckedChanged(object sender, EventArgs e)
135         {
136             Instance.GlobalSettings["rendering_occlusion_culling_enabled"] = cbOcclusionCulling.Checked;
137             if (Window != null)
138             {
139                 RenderSettings.OcclusionCullingEnabled = Instance.GlobalSettings["rendering_occlusion_culling_enabled"]
140                     && (RenderSettings.ARBQuerySupported || RenderSettings.CoreQuerySupported);
141             }
142         }
143
144         private void cbShiny_CheckedChanged(object sender, EventArgs e)
145         {
146             Instance.GlobalSettings["scene_viewer_shiny"] = cbShiny.Checked;
147             if (Window != null)
148             {
149                 if (RenderSettings.HasShaders)
150                 {
151                     Window.EnableShiny = cbShiny.Checked;
152                 }
153             }
154         }
155     }
156 }