Пример #1
0
// 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;
}
Пример #2
0
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);
}
Пример #3
0
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;
}