Shader* Shader::LoadFromFile(const char *vertexShaderFile, const char *fragmentShaderFile) { Shader *shader = new Shader(); shader->m_vertShaderId = CompileShader(GL_VERTEX_SHADER, vertexShaderFile); if (shader->m_vertShaderId == 0) { assert(false); delete shader; return NULL; } shader->m_fragShaderId = CompileShader(GL_FRAGMENT_SHADER, fragmentShaderFile); if (shader->m_fragShaderId == 0) { assert(false); delete shader; return NULL; } shader->m_programId = glCreateProgram(); glAttachShader(shader->m_programId, shader->m_vertShaderId); glAttachShader(shader->m_programId, shader->m_fragShaderId); shader->LinkProgram(); return shader; }
bool GameController::InitializeGraphics(const std::string &basePath) { Log::LogT("Initializing Graphics"); uint32_t screenWidth = TaxiGame::Environment::GetInstance()->GetScreenWidth(); uint32_t screenHeight = TaxiGame::Environment::GetInstance()->GetScreenHeight(); m_content = new Content(m_graphicsEngine); InterfaceProvider::m_content = m_content; m_content->LoadTextures(basePath + "data/gui/"); m_content->LoadTextures(basePath + "data/textures/"); m_content->LoadShaders(basePath + "data/shaders/"); m_content->LoadModels(basePath + "data/models/"); m_content->LoadAnimations(basePath + "data/animations/"); m_content->LoadMaterials(basePath + "data/materials/"); m_content->CombineResources(); DrawingRoutines::Initialize(); DrawingRoutines::SetProjectionMatrix(sm::Matrix::PerspectiveMatrix(45.0f, static_cast<float>(screenWidth) / static_cast<float>(screenHeight), 0.1f, 1000.0f)); Shader *shader = m_content->Get<Shader>("sprite"); SpriteBatch *spriteBatch = new SpriteBatch(shader, sm::Matrix::Ortho2DMatrix(0, screenWidth, screenHeight, 0)); SpritesMap *spritesMap = new SpritesMap(); if (!spritesMap->LoadFromFile(basePath + "data/gui/SpritesMap.xml", m_content)) return false; InterfaceProvider::m_graphicsEngine = m_graphicsEngine; InterfaceProvider::m_spriteBatch = spriteBatch; InterfaceProvider::m_spritesMap = spritesMap; InterfaceProvider::m_fonts["digital_bold_24"] = FontRenderer::LoadFromFile((basePath + "data/fonts/digital_bold_24.xml").c_str(), spriteBatch); InterfaceProvider::m_fonts["fenix_18"] = FontRenderer::LoadFromFile((basePath + "data/fonts/fenix_18.xml").c_str(), spriteBatch); InterfaceProvider::m_fonts["fenix_26"] = FontRenderer::LoadFromFile((basePath + "data/fonts/fenix_26.xml").c_str(), spriteBatch); debugSphere = m_content->Get<Model>("debug_sphere"); assert(debugSphere != NULL); Shader *spriteShader = m_content->Get<Shader>("Sprite2"); assert(spriteShader != NULL); spriteShader->BindVertexChannel(0, "a_position"); spriteShader->LinkProgram(); Sprite::Initialize(spriteShader); Control::SetSpriteBatch(spriteBatch); return true; }