2D_Game_Engine
Loading...
Searching...
No Matches
window.cpp
Go to the documentation of this file.
1#include <pch.hpp>
2#include <window.hpp>
3#include <buttons.hpp>
4#include <texturesmanager.hpp>
5#include <fontmanager.hpp>
6#include <textqueue.hpp>
7#ifdef EDITOR
8 #include <editor.hpp>
9#endif
10
11bool ISFULLSCREEN=false;
18
19namespace Window{
20 void GLAPIENTRY MessageCallback(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar* message,const void* userParam){
21 if(type==GL_DEBUG_TYPE_ERROR)
22 fprintf(stderr,"[[GL ERROR]] Type: 0x%x Severity: 0x%x Message: %s\n",type,severity,message);
23 }
24
25 void GLAPIENTRY FramebufferSizeCallback(GLFWwindow *WINDOW,int width,int height){
26 glViewport(0,0,width,height);
28 ProjUpdate=true;
29 #ifdef EDITOR
30 SceneFramebufferUpdate=true;
31 #endif
32 float current_point_size=RENDERER->GetPointSize();
33 float current_line_width=RENDERER->GetLineWidth();
34 Width=width;
35 Height=height;
36 RENDERER->SetPointSize(current_point_size);
37 RENDERER->SetLineWidth(current_line_width);
39
41 lights->S.Bind();
42 lights->S.SetUniform1f("window_width",(float)width);
43
44 #ifdef DEBUG
45 printf("Framebuffer resized to %dx%d\n",width,height);
46 #endif
47 }
48
49 void GLAPIENTRY ErrorCallback(int error,const char *description){
50 fprintf(stderr, "Error: %s\n", description);
51 }
52
53 void GetMousePos(double *x,double *y){
54 glfwGetCursorPos(Window,x,y);
55 *y=Height-(*y);
56 }
57
59 static int FPS=0;
60 static double last_time=0.0;
61 double current_time=glfwGetTime();
62 if(current_time-last_time>=0.5){
63 last_time=current_time;
64 FPS=1.0/DeltaTime;
65 }
66 TEXT_RENDERER->DrawText("FPS: "+std::to_string(FPS)+"\nFrame Time: "+std::to_string(DeltaTime*1000.0f)+" ms",
67 0.0f,Window::MAX_HEIGHT-TEXT_RENDERER->GetTextSize("FPS: "+std::to_string(FPS)+"\nFrame Time: "+std::to_string(DeltaTime*1000.0f)+" ms",
68 0.5f).second,0.5f,1'000'000,Vec3(1.0f,1.0f,1.0f));
69 }
70
71 int InitGlfwWindow(const char *window_name,bool resizable){
72 glfwInit();
73 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,4);
74 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,6);
75 glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
76 #ifdef __APPLE__
77 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
78 #endif
79 glfwWindowHint(GLFW_RESIZABLE,resizable);
80
81 Window=glfwCreateWindow(Width,Height,window_name,nullptr,nullptr);
82 if(Window==NULL){
83 perror("Failed to create GLFW WINDOW\n");
84 glfwTerminate();
85 return 1;
86 }
87
88 glfwMakeContextCurrent(Window);
89 glfwSwapInterval(1); //v-sync on
90
91 if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
92 perror("Failed to initialize GLAD\n");
93 return 1;
94 }
95
96 glfwSetFramebufferSizeCallback(Window,FramebufferSizeCallback);
97 glfwSetErrorCallback(ErrorCallback);
98
99 #ifdef DEBUG
100 glEnable(GL_DEBUG_OUTPUT);
101 glDebugMessageCallback(MessageCallback,0);
102 #endif
103
104 printf("%s\n%s\n",(char *)glGetString(GL_VERSION),(char *)glGetString(GL_RENDERER));
105
106 glViewport(0,0,Width,Height);
107
108 RENDERER=new Renderer;
109 TEXT_RENDERER=new TextRenderer("resources/fonts/open-sans/OpenSans-Regular.ttf",64,true);
110 INPUT=new Input;
114
115 return 0;
116 }
117
119 delete RENDERER;
120 delete TEXT_RENDERER;
121 delete INPUT;
122 delete TEXTURES_MANAGER;
123 delete FONT_MANAGER;
124 delete TEXT_QUEUE;
125 glfwTerminate();
126 }
127
129 int count;
130 const GLFWvidmode* modes=glfwGetVideoModes(glfwGetPrimaryMonitor(), &count);
131
132 printf("Available modes:\n");
133 for(int i=0;i<count;i++){
134 printf("%d: %dx%d @ %dHz\n",i,modes[i].width,modes[i].height,modes[i].refreshRate);
135 }
136 if(IsFullscreen)
137 glfwSetWindowMonitor(Window,nullptr,modes[count-1].width/2-BaseWidth/2,modes[count-1].height/2-BaseHeight/2,BaseWidth,BaseHeight,GLFW_DONT_CARE);
138 else
139 glfwSetWindowMonitor(Window,glfwGetPrimaryMonitor(),0,0,FullscreenWidth,FullscreenHeight,GLFW_DONT_CARE);
142 }
143
146 glfwSwapInterval(IsVSync);
147 }
148
149 void SetResizable(bool resizable){
150 glfwWindowHint(GLFW_RESIZABLE,resizable);
151 }
152
153 int parseLine(char *line){
154 int i=0;
155 while(*line<'0' || *line>'9')
156 line++;
157 while(*line>='0'&&*line<='9'){
158 i=i*10+(*line-'0');
159 line++;
160 }
161 return i;
162 }
163
169 int getMemInfoValue(const char *value){
170 FILE *file=fopen("/proc/meminfo","r");
171 int result=-1;
172 char line[128];
173
174 while(fgets(line,128,file)!=NULL){
175 if(strncmp(line,value,strlen(value))==0){
176 result=parseLine(line);
177 break;
178 }
179 }
180 fclose(file);
181 return result;
182 }
183
189 int getStatusValue(const char *value){
190 FILE *file=fopen("/proc/self/status","r");
191 int result=-1;
192 char line[128];
193
194 while(fgets(line,128,file)!=NULL){
195 if(strncmp(line,value,strlen(value))==0){
196 result=parseLine(line);
197 break;
198 }
199 }
200 fclose(file);
201 return result;
202 }
203
205 float totalMem=static_cast<float>(getMemInfoValue("MemTotal"))/1024.0f;
206 float availableMem=static_cast<float>(getMemInfoValue("MemAvailable"))/1024.0f;
207 //float SwapTotal=static_cast<float>(getMemInfoValue("SwapTotal"))/1024.0f;
208 //float SwapFree=static_cast<float>(getMemInfoValue("SwapFree"))/1024.0f;
209 float residentMem=static_cast<float>(getStatusValue("VmRSS"))/1024.0f;
210 printf("RAM: %.2f/%.2f MB\n",totalMem-availableMem,totalMem);
211 //printf("Swap: %.2f/%.2f MB\n",SwapTotal-SwapFree,SwapTotal);
212 printf("Resident Memory: %.2f MB\n",residentMem);
213
214 putchar('\n');
215 }
216
217 bool GetKeyState(int key,int state){
218 return glfwGetKey(Window,key)==state;
219 }
220
221 bool GetMouseButtonState(int button,int state){
222 return glfwGetMouseButton(Window,button)==state;
223 }
224
225 GLFWwindow *Window;
226
230
231 float FPS;
235 float Alpha; //for interpolation
236
240
242 bool ProjUpdate=false;
243 bool TextProjUpdate=false;
244 #ifdef EDITOR
245 bool SceneFramebufferUpdate=false;
246
247 int DrawCalls=0;
248 int VertexCount=0;
249 #endif
250
251 const float MAX_WIDTH=10.0f;
253}
void SetPointSize(float new_size)
Definition renderer.cpp:423
void SetLineWidth(float new_size)
Definition renderer.cpp:411
float GetLineWidth()
Definition renderer.cpp:434
RendererData * GetLightsData()
Definition renderer.hpp:236
float GetPointSize()
Definition renderer.cpp:430
void Bind() const
Definition shader.cpp:68
void SetUniform1f(const std::string &name, float v0)
Definition shader.cpp:132
std::pair< float, float > GetTextSize(std::string text, float scale)
void DrawText(const std::string &text, float x, float y, float scale, int layer, Vec3 color)
GLFWwindow * Window
Definition window.cpp:225
void GetMousePos(double *x, double *y)
Definition window.cpp:53
float FPS
Definition window.cpp:231
bool GetMouseButtonState(int button, int state)
Definition window.cpp:221
bool IsVSync
Definition window.cpp:238
float Height
Definition window.hpp:43
float BaseWidth
Definition window.cpp:228
int getStatusValue(const char *value)
Definition window.cpp:189
void GLAPIENTRY FramebufferSizeCallback(GLFWwindow *window, int width, int height)
Definition window.cpp:25
void ShowMetrics()
Definition window.cpp:58
const float MAX_WIDTH
Definition window.cpp:251
void ToggleFullScreen()
Definition window.cpp:128
bool GetKeyState(int key, int state)
Definition window.cpp:217
bool ProjUpdate
Definition window.cpp:242
bool ShowMetrics_
Definition window.cpp:239
void GLAPIENTRY ErrorCallback(int error, const char *description)
Definition window.cpp:49
bool TextProjUpdate
Definition window.cpp:243
int parseLine(char *line)
Definition window.cpp:153
int InitGlfwWindow(const char *window_name, bool resizable)
Definition window.cpp:71
float Width
Definition window.cpp:227
void SetResizable(bool resizable)
Definition window.cpp:149
float MAX_HEIGHT
Definition window.cpp:252
void PrintDebugInfo()
Definition window.cpp:204
float CurrentFrameTime
Definition window.cpp:232
void DeinitGlfwWindow()
Definition window.cpp:118
float LastFrameTime
Definition window.cpp:233
bool IsFullscreen
Definition window.cpp:237
float FullscreenWidth
Definition window.cpp:229
void GLAPIENTRY MessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
Definition window.cpp:20
void ToggleVSync()
Definition window.cpp:144
float BaseHeight
Definition window.hpp:44
bool FramebufferUpdate
Definition window.cpp:241
int getMemInfoValue(const char *value)
Definition window.cpp:169
float FullscreenHeight
Definition window.hpp:45
float DeltaTime
Definition window.cpp:234
float Alpha
Definition window.cpp:235
fclose(fkey)
std::string key
int i
TexturesManager * TEXTURES_MANAGER
The textures manager.
Definition window.cpp:15
FontManager * FONT_MANAGER
The font manager.
Definition window.cpp:16
Renderer * RENDERER
The main renderer.
Definition window.cpp:12
TextRenderer * TEXT_RENDERER
The text renderers.
Definition window.cpp:13
bool ISFULLSCREEN
Definition window.cpp:11
TextQueue * TEXT_QUEUE
The text queue.
Definition window.cpp:17
Input * INPUT
The input manager.
Definition window.cpp:14
TexturesManager * TEXTURES_MANAGER
The textures manager.
Definition window.cpp:15
FontManager * FONT_MANAGER
The font manager.
Definition window.cpp:16
Renderer * RENDERER
The main renderer.
Definition window.cpp:12
TextRenderer * TEXT_RENDERER
The text renderers.
Definition window.cpp:13
bool ISFULLSCREEN
Definition window.cpp:11
TextQueue * TEXT_QUEUE
The text queue.
Definition window.cpp:17
Input * INPUT
The input manager.
Definition window.cpp:14