// Helpers SDL_Texture* CFontManager::TTFLoadText(float& out_fWidth, const char* szText, const SDL_Color& tColor, const float fHeight) { SDL_Surface* pTextSurface = TTF_RenderText_Blended(m_pTTFont, szText, tColor); SDL_ERROR_CHECK(pTextSurface == NULL, "Unable to load text surface!"); SDL_Texture* pTextTexture = SDL_CreateTextureFromSurface(m_pRenderManager->GetRenderer(), pTextSurface); SDL_ERROR_CHECK(pTextTexture == NULL, "Unable to create texture from text surface!"); out_fWidth = (static_cast<float>(pTextSurface->w) / pTextSurface->h) * fHeight; SDL_FreeSurface(pTextSurface); return pTextTexture; }
void CFontManager::Initialize(CRenderManager* pRenderManager) { m_pRenderManager = pRenderManager; SDL_ERROR_CHECK(TTF_Init() == -1, "SDL_ttf could not initialize!"); m_pTTFont = TTF_OpenFont("../Fonts/unispace.ttf", 72); TTF_SetFontHinting(m_pTTFont, TTF_HINTING_LIGHT); }
bool Window::init(bool enableVsync, int oglMajorVersion, int oglMinorVersion) { if (SDL_Init(SDL_INIT_VIDEO) != 0) { SDL_ERROR_CHECK(); return false; } SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8); m_window = SDL_CreateWindow("Hello World!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_width, m_height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); if (!m_window) { SDL_ERROR_CHECK(); return false; } #ifndef EMSCRIPTEN SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, oglMajorVersion); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, oglMinorVersion); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); #endif SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); m_context = SDL_GL_CreateContext(m_window); if (!m_context) { SHOW_ERROR("Failed to create OpenGL context. Make sure your GPU supports OpenGL " << oglMajorVersion << "." << oglMinorVersion); std::stringstream ss; ss << "Failed to create OpenGL context. Make sure your GPU supports OpenGL " << oglMajorVersion << "." << oglMinorVersion; showErrorBox("Context Creation Error", ss.str()); return false; } setVsync(enableVsync); glewExperimental = GL_TRUE; GLenum err = glewInit(); if (err != GLEW_OK) { #ifdef EMSCRIPTEN SHOW_ERROR("Error " << err << " occured when initializing glew: \n"); #else const GLubyte *errString = gluErrorString(err); SHOW_ERROR("Error " << err << " occured when initializing glew: \n" << errString); std::stringstream ss; ss << "Error " << err << " occured when initializing glew: \n" << errString; showErrorBox("GLEW Initialization Error", ss.str()); #endif return false; } // OpenGL 3.2+ might mistakenly report an invalid enum error. Ignore it: glGetError(); SDL_ERROR_CHECK(); return true; }