Merge: Make the `do catch` great again
[nit.git] / lib / gamnit / display.nit
1 # This file is part of NIT (http://www.nitlanguage.org).
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 # Abstract display services
16 module display
17
18 import ::glesv2
19 import mnit::input
20
21 import display_linux is conditional(linux)
22 import display_android is conditional(android)
23 import display_ios is conditional(ios)
24
25 # Should Gamnit be more verbose?
26 fun debug_gamnit: Bool do return false
27
28 # General display class, is sized and drawable
29 class GamnitDisplay
30
31 # Width of the display, in pixels
32 fun width: Int is abstract
33
34 # Height of the display, in pixels
35 fun height: Int is abstract
36
37 # Aspect ratio of the screen, `width / height`
38 fun aspect_ratio: Float do return width.to_f / height.to_f
39
40 # Is the cursor locked et the center of the screen?
41 var lock_cursor = false is writable
42
43 # Is the cursor visible?
44 #
45 # Only affects the desktop implementations.
46 var show_cursor: Bool = true is writable
47
48 # Number of bits used for the red value in the color buffer
49 fun red_bits: Int do return 8
50
51 # Number of bits used for the green value in the color buffer
52 fun green_bits: Int do return 8
53
54 # Number of bits used for the blue value in the color buffer
55 fun blue_bits: Int do return 8
56
57 # Prepare this display
58 #
59 # The implementation varies per platform.
60 fun setup is abstract
61
62 # Close this display and free underlying resources
63 #
64 # The implementation varies per platform.
65 fun close do end
66
67 # Flip the display buffers
68 #
69 # The implementation varies per platform.
70 fun flip do end
71
72 # Loop on available events and feed them back to the app
73 #
74 # The implementation varies per platform.
75 fun feed_events do end
76
77 # Extensions to OpenGL ES 2.0 supported by the current configuration
78 var gl_extensions: Array[String] is lazy do return glGetString(gl_EXTENSIONS).split(' ')
79 end