1 /*
2 Copyright (c) 2005-2022 Intel Corporation
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17 #include <cassert>
18 #include <stdio.h>
19
20 #include "video.hpp"
21
22 unsigned int *g_pImg = nullptr;
23 int g_sizex, g_sizey;
24 static video *g_video = nullptr;
25 static int g_fps = 0;
26
27 #if _WIN32 || _WIN64
28
29 static DWORD g_msec = 0;
30
31 #ifdef _WINDOWS
32 HINSTANCE video::win_hInstance = 0;
33 int video::win_iCmdShow = 0;
win_set_class(WNDCLASSEX & wcex)34 void video::win_set_class(WNDCLASSEX &wcex) {}
win_load_accelerators(int idc)35 void video::win_load_accelerators(int idc) {}
36 #endif //_WINDOWS
37
38 #else
39 #include <sched.h>
40 #include <sys/time.h>
41 struct timeval g_time;
42 #endif //_WIN32||_WIN64
43
44 #define CALC_FPS_ENABLED ((WINAPI_FAMILY != WINAPI_FAMILY_APP) && (!__ANDROID__))
45
video()46 video::video()
47 // OpenGL* RGBA byte order for little-endian CPU
48 : depth(24),
49 red_shift(0),
50 green_shift(8),
51 blue_shift(16),
52 red_mask(0xff),
53 green_mask(0xff00),
54 blue_mask(0xff0000) {
55 assert(g_video == nullptr);
56 g_video = this;
57 title = "Video";
58 updating = calc_fps = false;
59 }
60
init_window(int x,int y)61 bool video::init_window(int x, int y) {
62 g_sizex = x;
63 g_sizey = y;
64 g_pImg = new unsigned int[x * y];
65 running = true;
66 return false;
67 }
68
init_console()69 bool video::init_console() {
70 running = true;
71 return true;
72 }
73
terminate()74 void video::terminate() {
75 #if CALC_FPS_ENABLED
76 if (calc_fps) {
77 double fps = g_fps;
78 #if _WIN32 || _WIN64
79 fps /= (GetTickCount() - g_msec) / 1000.0;
80 #else
81 struct timezone tz;
82 struct timeval end_time;
83 gettimeofday(&end_time, &tz);
84 fps /= (end_time.tv_sec + 1.0 * end_time.tv_usec / 1000000.0) -
85 (g_time.tv_sec + 1.0 * g_time.tv_usec / 1000000.0);
86 #endif
87 printf("%s: %.1f fps\n", title, fps);
88 }
89 #endif
90 g_video = nullptr;
91 running = false;
92
93 delete[] g_pImg;
94 g_pImg = nullptr;
95 }
96
~video()97 video::~video() {
98 if (g_video)
99 terminate();
100 }
101
102 //! Count and display FPS count in titlebar
next_frame()103 bool video::next_frame() {
104 #if CALC_FPS_ENABLED
105 if (calc_fps) {
106 if (!g_fps) {
107 #if _WIN32 || _WIN64
108 g_msec = GetTickCount();
109 #else
110 struct timezone tz;
111 gettimeofday(&g_time, &tz);
112 #endif
113 }
114 g_fps++;
115 }
116 #endif
117 return running;
118 }
119
120 //! Do standard loop
main_loop()121 void video::main_loop() {
122 on_process();
123 }
124
125 //! Change window title
show_title()126 void video::show_title() {}
127
128 ///////////////////////////////////////////// public methods of video class ///////////////////////
129
drawing_area(int x,int y,int sizex,int sizey)130 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
131 : base_index(y * g_sizex + x),
132 max_index(g_sizex * g_sizey),
133 index_stride(g_sizex),
134 pixel_depth(24),
135 ptr32(g_pImg),
136 start_x(x),
137 start_y(y),
138 size_x(sizex),
139 size_y(sizey) {
140 assert(x < g_sizex);
141 assert(y < g_sizey);
142 assert(x + sizex <= g_sizex);
143 assert(y + sizey <= g_sizey);
144
145 index = base_index; // current index
146 }
147
update()148 void drawing_area::update() {}
149