MCPcopy Create free account
hub / github.com/ErrorAtLine0/infinipaint / initialize_sdl

Function initialize_sdl

src/main.cpp:214–374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

212}
213
214void initialize_sdl(MainStruct& mS) {
215 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_NAME_STRING, "InfiniPaint");
216 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_VERSION_STRING, VersionConstants::CURRENT_VERSION_STRING.c_str());
217 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_IDENTIFIER_STRING, "com.infinipaint.infinipaint");
218 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_CREATOR_STRING, "Yousef Khadadeh (ErrorAtLine0)");
219 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_COPYRIGHT_STRING, "Copyright (C) 2025-2026 Yousef Khadadeh");
220 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_URL_STRING, "https://infinipaint.com/");
221 SDL_SetAppMetadataProperty(SDL_PROP_APP_METADATA_TYPE_STRING, "application");
222
223 SDL_SetHint(SDL_HINT_APP_NAME, "InfiniPaint");
224 SDL_SetHint(SDL_HINT_PEN_TOUCH_EVENTS, "0");
225 SDL_SetHint(SDL_HINT_PEN_MOUSE_EVENTS, "0");
226 SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "0");
227 SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");
228 SDL_SetHint(SDL_HINT_ANDROID_TRAP_BACK_BUTTON, "1");
229 SDL_SetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT, "#canvas"); // Ensures that SDL only grabs input when browser is focused on canvas
230
231 if(!SDL_Init(SDL_INIT_VIDEO))
232 throw std::runtime_error("[SDL_Init] " + std::string(SDL_GetError()));
233
234 Uint32 window_flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN | SDL_WINDOW_HIGH_PIXEL_DENSITY;
235#ifdef USE_BACKEND_VULKAN
236 window_flags |= SDL_WINDOW_VULKAN;
237#elif USE_BACKEND_OPENGL
238 window_flags |= SDL_WINDOW_OPENGL;
239 SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0);
240
241 #if defined(__EMSCRIPTEN__) || defined(USE_BACKEND_OPENGLES_3_0)
242 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
243 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
244 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
245 #elif defined(USE_BACKEND_OPENGL_2_1)
246 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
247 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
248 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
249 #else
250 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
251 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
252 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
253 #endif
254
255 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
256 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
257 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, mS.kStencilBits);
258 SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
259#endif
260
261 constexpr int DEFAULT_WINDOW_WIDTH = 1000;
262 constexpr int DEFAULT_WINDOW_HEIGHT = 900;
263
264 #ifdef __EMSCRIPTEN__
265 {
266 Vector2d sizeD;
267 EMSCRIPTEN_RESULT result = emscripten_get_element_css_size("#canvas", &sizeD.x(), &sizeD.y());
268 if(result != EMSCRIPTEN_RESULT_SUCCESS)
269 std::cout << "Failed to get canvas size" << std::endl;
270 else {
271 mS.m->window.writtenSize.x() = mS.m->window.size.x() = sizeD.x();

Callers 1

SDL_AppInitFunction · 0.85

Calls 15

vec_prettyFunction · 0.85
load_file_to_stringFunction · 0.85
gladLoadGLES2Function · 0.85
get_refresh_rateFunction · 0.85
c_strMethod · 0.80
logMethod · 0.80
set_vsync_valueMethod · 0.80
update_safe_areaMethod · 0.80
gladLoadGLFunction · 0.50
getFunction · 0.50
xMethod · 0.45

Tested by

no test coverage detected