Index

zydeco / 3c60e1a

Experiment in graphics programming, C++, OpenGL, simulation techniques.

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
505 Aug 2023 23:143c60e1aUse GL3WJosh Stockin1444G

Blob @ zydeco / src / main.cpp

text/plain2276 bytesdownload raw
1#include <iostream>
2#include <thread>
3
4#include <SDL2/SDL.h>
5#include "GL/gl3w.h"
6#include <GL/gl.h>
7
8#include "ZydecoCommon.hpp"
9#include "CommonSDL2.hpp"
10#include "EventHandlerSDL2.hpp"
11#include "WindowSDL2.hpp"
12#include "Engine.hpp"
13
14
15static Logger LOGGER("MAIN");
16
17static const char *ZYDECO_TERMOUT[] = {
18 "Zydeco v0.1.0 Copyright (c) Joshua Stockin 2023",
19 "<https://joshstock.in> <josh@joshstock.in>",
20};
21
22
23void on_terminate(void)
24{
25 ZydecoFault("TERMINATED");
26}
27
28int main(int argc, char *argv[])
29{
30 // Print boilerplate copyright output
31 for (const char *line : ZYDECO_TERMOUT)
32 {
33 std::cout << line << std::endl;
34 }
35
36 // Runtime environment setup
37 std::set_terminate((std::terminate_handler)on_terminate);
38
39 // Initialize logging
40 Logger::InitializeLogging(Logger::VERBOSE, &std::cout);
41 LOGGER.Log(Logger::INFO, "Logging initialized");
42
43 // Initialize SDL environment
44 LOGGER.Log(Logger::INFO, "Initializing SDL...");
45 SDL_CallErrorReturningFunction(SDL_Init, SDL_INIT_VIDEO | SDL_INIT_EVENTS);
46 LOGGER.Log(Logger::INFO, "SDL initialized");
47
48 // Create subsystems
49 LOGGER.Log(Logger::INFO, "Creating subsystems...");
50 EventHandlerSDL2 sdl_event_handler {};
51 WindowSDL2 sdl_window {"Zydeco", SDL_WINDOW_MAXIMIZED | SDL_WINDOW_RESIZABLE};
52
53 // Load OpenGL
54 LOGGER.Log(Logger::INFO, "Loading OpenGL with GL3W...");
55
56 int gl3wRes = gl3wInit();
57 if (gl3wRes != 0)
58 {
59 ZydecoFault("gl3wInit failed ({})", gl3wRes);
60 }
61
62 if (!gl3wIsSupported(GL_VERSION_MAJOR, GL_VERSION_MINOR))
63 {
64 ZydecoFault("OpenGL/GL3W {}.{} not supported", GL_VERSION_MAJOR, GL_VERSION_MINOR);
65 }
66
67 LOGGER.Log(Logger::DEBUG, "OpenGL {}, GLSL {}", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION));
68
69 LOGGER.Log(Logger::INFO, "OpenGL loaded with GL3W");
70
71 LOGGER.Log(Logger::INFO, "Subsystems created");
72
73 // Create engine
74 LOGGER.Log(Logger::INFO, "Creating engine...");
75 Engine engine {sdl_event_handler, sdl_window};
76 LOGGER.Log(Logger::INFO, "Engine created");
77
78 // Enter loop
79 LOGGER.Log(Logger::INFO, "Entering engine loop");
80 engine.Execute();
81
82 // Loop returned
83 LOGGER.Log(Logger::INFO, "Exiting engine loop");
84
85 return 0;
86}
87