1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // Display.h: Defines the Display class, representing the abstract
16 // display on which graphics are drawn.
17 
18 #ifndef INCLUDE_DISPLAY_H_
19 #define INCLUDE_DISPLAY_H_
20 
21 #include "Surface.h"
22 #include "Context.h"
23 #include "Device.hpp"
24 
25 #include <set>
26 
27 namespace gl
28 {
29 	struct DisplayMode
30 	{
31 		unsigned int width;
32 		unsigned int height;
33 		sw::Format format;
34 	};
35 
36 	class Display
37 	{
38 	public:
39 		~Display();
40 
41 		static Display *getDisplay(NativeDisplayType displayId);
42 
43 		bool initialize();
44 		void terminate();
45 
46 		Context *createContext(const Context *shareContext);
47 
48 		void destroySurface(Surface *surface);
49 		void destroyContext(Context *context);
50 
51 		bool isInitialized() const;
52 		bool isValidContext(Context *context);
53 		bool isValidSurface(Surface *surface);
54 		bool isValidWindow(NativeWindowType window);
55 
56 		GLint getMinSwapInterval();
57 		GLint getMaxSwapInterval();
58 
59 		virtual Surface *getPrimarySurface();
60 
61 		NativeDisplayType getNativeDisplay() const;
62 
63 	private:
64 		Display(NativeDisplayType displayId);
65 
66 		DisplayMode getDisplayMode() const;
67 
68 		const NativeDisplayType displayId;
69 
70 		GLint mMaxSwapInterval;
71 		GLint mMinSwapInterval;
72 
73 		typedef std::set<Surface*> SurfaceSet;
74 		SurfaceSet mSurfaceSet;
75 
76 		typedef std::set<Context*> ContextSet;
77 		ContextSet mContextSet;
78 	};
79 }
80 
81 #endif   // INCLUDE_DISPLAY_H_
82