GCC Code Coverage Report


Directory: src/gate/
File: src/gate/graphics/cxx_gl_apis.cpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 0 210 0.0%
Functions: 0 60 0.0%
Branches: 0 72 0.0%

Line Branch Exec Source
1 #include "gate/graphics/gl_apis.hpp"
2 #include "gate/exceptions.hpp"
3
4 namespace gate
5 {
6 namespace graph
7 {
8
9 GlApi::GlApi()
10 {
11 result_t result = gate_gl_api_init();
12 GATEXX_CHECK_EXCEPTION(result);
13 }
14
15 GlApi::~GlApi() noexcept
16 {
17 }
18
19 void GlApi::setColor(real32_t r, real32_t g, real32_t b)
20 {
21 gate_gl_api_color3(r, g, b);
22 }
23 void GlApi::setColor(real32_t r, real32_t g, real32_t b, real32_t a)
24 {
25 gate_gl_api_color4(r, g, b, a);
26 }
27 void GlApi::setColorByte(uint8_t r, uint8_t g, uint8_t b)
28 {
29 gate_gl_api_color3b(r, g, b);
30 }
31 void GlApi::setColorByte(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
32 {
33 gate_gl_api_color4b(r, g, b, a);
34 }
35 void GlApi::setVertexPointer(size_t coord_count, real32_t const* ptr_coords)
36 {
37 gate_gl_api_vertexpointer(coord_count, ptr_coords);
38 }
39 void GlApi::setTexCoordPointer(size_t coord_count, real32_t const* ptr_coords)
40 {
41 gate_gl_api_texcoordpointer(coord_count, ptr_coords);
42 }
43 void GlApi::setShadeModel(ShadeModelEnum model)
44 {
45 gate_gl_api_shademodel((gate_gl_api_shademodel_t)(int)model);
46 }
47 void GlApi::setBlendFunc(BlendEnum srcFunc, BlendEnum dstFunc)
48 {
49 gate_gl_api_blendfunc((gate_gl_api_blend_t)(int)srcFunc, (gate_gl_api_blend_t)(int)dstFunc);
50 }
51 void GlApi::setClearColor(real32_t r, real32_t g, real32_t b, real32_t a)
52 {
53 gate_gl_api_clearcolor(r, g, b, a);
54 }
55 void GlApi::setClearDepth(real32_t depth)
56 {
57 gate_gl_api_cleardepth(depth);
58 }
59 void GlApi::enableCapability(CapabilityEnum capability)
60 {
61 gate_gl_api_enable((gate_gl_api_capability_t)(int)capability);
62 }
63 void GlApi::disableCapability(CapabilityEnum capability)
64 {
65 gate_gl_api_disable((gate_gl_api_capability_t)(int)capability);
66 }
67 void GlApi::setDepthFunc(DepthEnum depthFunction)
68 {
69 gate_gl_api_depthfunc((gate_gl_api_depth_t)(int)depthFunction);
70 }
71 void GlApi::setDepthMask(bool_t enabled)
72 {
73 gate_gl_api_depthmask(enabled);
74 }
75
76 void GlApi::setHint(HintEnum hintType, HintModeEnum hintMode)
77 {
78 gate_gl_api_hint((gate_gl_api_hint_t)(int)hintType, (gate_gl_api_hintmode_t)(int)hintMode);
79 }
80 void GlApi::setViewport(int32_t x, int32_t y, int32_t width, int32_t height)
81 {
82 gate_gl_api_viewport(x, y, width, height);
83 }
84 void GlApi::setMatrixMode(MatrixModeEnum matrixMode)
85 {
86 gate_gl_api_matrixmode((gate_gl_api_matrixmode_t)(int)matrixMode);
87 }
88 void GlApi::loadIdentity()
89 {
90 gate_gl_api_loadidentity();
91 }
92 void GlApi::mulMatrix(real32_t const matrix[16])
93 {
94 gate_gl_api_multmatrix(matrix);
95 }
96 void GlApi::translate(real32_t x, real32_t y, real32_t z)
97 {
98 gate_gl_api_translate(x, y, z);
99 }
100 void GlApi::rotate(real32_t angle, real32_t x, real32_t y, real32_t z)
101 {
102 gate_gl_api_rotate(angle, x, y, z);
103 }
104
105 void GlApi::flush()
106 {
107 gate_gl_api_flush();
108 }
109 void GlApi::finish()
110 {
111 gate_gl_api_finish();
112 }
113 void GlApi::clear(unsigned clearBits)
114 {
115 gate_gl_api_clear(clearBits);
116 }
117 void GlApi::setPerspective(real32_t fovy, real32_t aspect, real32_t znear, real32_t zfar)
118 {
119 gate_gl_api_perspective(fovy, aspect, znear, zfar);
120 }
121 void GlApi::lookAt(real32_t eyeX, real32_t eyeY, real32_t eyeZ, real32_t lookX, real32_t lookY, real32_t lookZ, real32_t upX, real32_t upY, real32_t upZ)
122 {
123 gate_gl_api_lookat(eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
124 }
125 void GlApi::enableClientState(ClientStateEnum state)
126 {
127 gate_gl_api_enableclientstate((gate_gl_api_clientstate_t)(int)state);
128 }
129 void GlApi::disableClientState(ClientStateEnum state)
130 {
131 gate_gl_api_disableclientstate((gate_gl_api_clientstate_t)(int)state);
132 }
133 void GlApi::drawArrays(DrawModeEnum drawMode, int index, size_t vertex_count)
134 {
135 gate_gl_api_drawarrays((gate_gl_api_drawmode_t)(int)drawMode, index, vertex_count);
136 }
137 void* GlApi::createTexture(PixelFormatEnum pixelFormat, uint32_t width, uint32_t height, void const* data)
138 {
139 return gate_gl_api_createtexture((gate_gl_api_pixelformat_t)(int)pixelFormat, width, height, data);
140 }
141 void GlApi::deleteTexture(void* textureId)
142 {
143 gate_gl_api_deletetexture(textureId);
144 }
145 void GlApi::bindTexture(void* textureId)
146 {
147 gate_gl_api_bindtexture(textureId);
148 }
149 void GlApi::setCullFace(CullFaceEnum cullface)
150 {
151 gate_gl_api_cullface((gate_gl_api_cullface_t)cullface);
152 }
153
154
155
156
157
158 GlSurfaceEventSink::GlSurfaceEventSink()
159 : surface_ptr(NULL)
160 {
161 }
162
163 GlSurfaceEventSink::~GlSurfaceEventSink() noexcept
164 {
165 }
166
167 GlSurface& GlSurfaceEventSink::getSurface()
168 {
169 if (!this->surface_ptr)
170 {
171 GATEXX_RAISE_ERROR(results::NullPointer);
172 }
173 return *this->surface_ptr;
174 }
175 void GlSurfaceEventSink::connectSurface(GlSurface& surface)
176 {
177 this->surface_ptr = &surface;
178 }
179
180
181
182 enumint_t const GlSurface::Flag_SoftwareRendering = GATE_GL_SURFACE_FLAG_SOFTWARE_RENDERING;
183
184
185 GlSurface::GlSurface()
186 {
187 result_t result = gate_gl_surface_init(&this->impl);
188 GATEXX_CHECK_ERROR(result);
189 }
190 GlSurface::~GlSurface() noexcept
191 {
192 gate_gl_surface_uninit(&this->impl);
193 }
194
195 void GlSurface::openScreen(uint32_t width, uint32_t height, enumint_t flags)
196 {
197 result_t result = gate_gl_surface_open(&this->impl, gate_gl_surface_type_screen, width, height, flags);
198 GATEXX_CHECK_ERROR(result);
199 }
200 void GlSurface::openImage(uint32_t width, uint32_t height, enumint_t flags)
201 {
202 result_t result = gate_gl_surface_open(&this->impl, gate_gl_surface_type_image, width, height, flags);
203 GATEXX_CHECK_ERROR(result);
204 }
205
206 void GlSurface::close()
207 {
208 result_t result = gate_gl_surface_close(&this->impl);
209 GATEXX_CHECK_ERROR(result);
210 }
211
212 void GlSurface::getSize(uint32_t& width, uint32_t& height)
213 {
214 result_t result = gate_gl_surface_get_size(&this->impl, &width, &height);
215 GATEXX_CHECK_ERROR(result);
216 }
217 void GlSurface::resize(uint32_t width, uint32_t height)
218 {
219 result_t result = gate_gl_surface_resize(&this->impl, width, height);
220 GATEXX_CHECK_EXCEPTION(result);
221 }
222
223 RasterImage GlSurface::printImage()
224 {
225 gate_rasterimage_t rasterimage = GATE_INIT_EMPTY;
226 result_t result = gate_gl_surface_print_image(&this->impl, &rasterimage);
227 GATEXX_CHECK_ERROR(result);
228 RasterImage image(&rasterimage);
229 gate_rasterimage_release(&rasterimage);
230 return image;
231 }
232
233
234 static void surface_events_on_render(gate_gl_surface_t* surface, void* user_param)
235 {
236 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
237 try
238 {
239 sink->onRender(sink->getSurface());
240 }
241 catch (...) {}
242 }
243 static void surface_events_on_exit(gate_gl_surface_t* surface, void* user_param)
244 {
245 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
246 try
247 {
248 sink->onExit(sink->getSurface());
249 }
250 catch (...) {}
251 }
252 static void surface_events_on_resize(gate_gl_surface_t* surface, gate_uint32_t width, gate_uint32_t height, void* user_param)
253 {
254 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
255 try
256 {
257 sink->onResize(sink->getSurface(), width, height);
258 }
259 catch (...) {}
260 }
261 static void surface_events_on_key_down(gate_gl_surface_t* surface, gate_input_keycode_t keyboard_key,
262 gate_input_keystates_t keyboard_states, void* user_param)
263 {
264 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
265 try
266 {
267 sink->onKeyDown(sink->getSurface(), Keyboard::KeyEnum(keyboard_key), keyboard_states);
268 }
269 catch (...) {}
270 }
271 static void surface_events_on_key_up(gate_gl_surface_t* surface, gate_input_keycode_t keyboard_key,
272 gate_input_keystates_t keyboard_states, void* user_param)
273 {
274 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
275 try
276 {
277 sink->onKeyUp(sink->getSurface(), Keyboard::KeyEnum(keyboard_key), keyboard_states);
278 }
279 catch (...) {}
280 }
281 static void surface_events_on_pointer_down(gate_gl_surface_t* surface, gate_uint32_t pointer_type, gate_real32_t x, gate_real32_t y, void* user_param)
282 {
283 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
284 try
285 {
286 sink->onPointerDown(sink->getSurface(), pointer_type, x, y);
287 }
288 catch (...) {}
289 }
290 static void surface_events_on_pointer_move(gate_gl_surface_t* surface, gate_uint32_t pointer_type, gate_real32_t x, gate_real32_t y, void* user_param)
291 {
292 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
293 try
294 {
295 sink->onPointerMove(sink->getSurface(), pointer_type, x, y);
296 }
297 catch (...) {}
298 }
299 static void surface_events_on_pointer_up(gate_gl_surface_t* surface, gate_uint32_t pointer_type, gate_real32_t x, gate_real32_t y, void* user_param)
300 {
301 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
302 try
303 {
304 sink->onPointerUp(sink->getSurface(), pointer_type, x, y);
305 }
306 catch (...) {}
307 }
308 static void surface_events_on_scroll(gate_gl_surface_t* surface, gate_int32_t x_direction, gate_int32_t y_direction, void* user_param)
309 {
310 GlSurfaceEventSink* sink = static_cast<GlSurfaceEventSink*>(user_param);
311 try
312 {
313 sink->onScroll(sink->getSurface(), x_direction, y_direction);
314 }
315 catch (...) {}
316 }
317
318 static gate_gl_surface_events_t cpp_dispatcher =
319 {
320 &surface_events_on_render,
321 &surface_events_on_exit,
322 &surface_events_on_resize,
323
324 &surface_events_on_key_down,
325 &surface_events_on_key_up,
326 &surface_events_on_pointer_down,
327 &surface_events_on_pointer_move,
328 &surface_events_on_pointer_up,
329 &surface_events_on_scroll
330 };
331
332 void GlSurface::runEventLoop(GlSurfaceEventSink& eventHandler)
333 {
334 eventHandler.connectSurface(*this);
335 result_t result = gate_gl_surface_run_event_loop(&this->impl, &cpp_dispatcher, static_cast<void*>(&eventHandler));
336 GATEXX_CHECK_ERROR(result);
337 }
338 void GlSurface::exitEventLoop()
339 {
340 result_t result = gate_gl_surface_exit_event_loop(&this->impl);
341 GATEXX_CHECK_ERROR(result);
342 }
343 void GlSurface::swapBuffers()
344 {
345 result_t result = gate_gl_surface_swap_buffers(&this->impl);
346 GATEXX_CHECK_ERROR(result);
347 }
348
349 GlApi& GlSurface::getGlApi()
350 {
351 return this->api;
352 }
353
354 } // end of namespace graph
355 } // end of namespace gate
356