54 {
56
57 if (!s_GLFWInitialized)
58 {
59 int success = glfwInit();
60 EE_CORE_ASSERT(success, "Could not initialize GLFW.");
61 glfwSetErrorCallback(GLFWErrorCallback);
62 s_GLFWInitialized = true;
63 }
64
65 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
66 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
67 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
68 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true);
69
70 m_Window = glfwCreateWindow((
int)props.Width, (
int)props.Height,
m_Data.
Title.c_str(),
nullptr,
nullptr);
71
72 m_Context = new OpenGLContext(m_Window);
74
75
77
78
79 glfwSetWindowUserPointer(m_Window, &
m_Data);
80
81 glfwSetWindowSizeCallback(m_Window, [](GLFWwindow* window, int width, int height)
82 {
83 void* userPtr = glfwGetWindowUserPointer(window);
84 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
85 dataPtr->Width = width;
86 dataPtr->Height = height;
87 WindowResizeEvent event(width, height);
88 dataPtr->EventCallback(event);
89 });
90
91 glfwSetWindowCloseCallback(m_Window, [](GLFWwindow* window)
92 {
93 void* userPtr = glfwGetWindowUserPointer(window);
94 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
95 WindowCloseEvent event;
96 dataPtr->EventCallback(event);
97 });
98
99 glfwSetWindowFocusCallback(m_Window, [](GLFWwindow* window, int focused)
100 {
101 void* userPtr = glfwGetWindowUserPointer(window);
102 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
103 WindowFocusEvent event(focused);
104 dataPtr->EventCallback(event);
105 });
106
107 glfwSetKeyCallback(m_Window, [](GLFWwindow* window, int key, int scancode, int action, int mods)
108 {
109 void* userPtr = glfwGetWindowUserPointer(window);
110 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
111
112 switch(action)
113 {
114 case GLFW_PRESS:
115 {
116 KeyPressedEvent event(key, 0);
117 dataPtr->EventCallback(event);
118 break;
119 }
120 case GLFW_RELEASE:
121 {
122 KeyReleasedEvent event(key);
123 dataPtr->EventCallback(event);
124 break;
125 }
126 case GLFW_REPEAT:
127 {
128 KeyPressedEvent event(key, 1);
129 dataPtr->EventCallback(event);
130 break;
131 }
132 }
133 });
134
135 glfwSetCharCallback(m_Window, [](GLFWwindow* window, unsigned int keycode)
136 {
137 void* userPtr = glfwGetWindowUserPointer(window);
138 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
139 KeyTypedEvent event(keycode);
140 dataPtr->EventCallback(event);
141 });
142
143 glfwSetMouseButtonCallback(m_Window, Elevate_MouseButtonCallback);
144
145 glfwSetScrollCallback(m_Window, [](GLFWwindow* window, double xOffset, double yOffset)
146 {
147 void* userPtr = glfwGetWindowUserPointer(window);
148 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
149 MouseScrolledEvent event((float)xOffset, (float)yOffset);
150 dataPtr->EventCallback(event);
151 });
152
153 glfwSetCursorPosCallback(m_Window, [](GLFWwindow* window, double xPos, double yPos)
154 {
155 void* userPtr = glfwGetWindowUserPointer(window);
156 WindowData* dataPtr = static_cast<WindowData*>(userPtr);
157 MouseMovedEvent event((float)xPos, (float)yPos);
158 dataPtr->EventCallback(event);
159 });
160 }
void SetVSync(bool enabled) override
virtual void Init(const WindowProps &props)