修改底层渲染为OpenGL
This commit is contained in:
@@ -20,17 +20,25 @@ void Game::Init(std::function<void()> CallBack)
|
||||
SDL_JoystickEventState(SDL_ENABLE);
|
||||
SDL_JoystickOpen(0);
|
||||
|
||||
// 设置OpenGL ES 3.2上下文属性
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); // 双缓冲
|
||||
|
||||
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL could not initialize! Error: %s\n", SDL_GetError());
|
||||
m_isRunning = false;
|
||||
}
|
||||
m_window = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, Screen_W, Screen_H, SDL_WINDOW_SHOWN);
|
||||
m_window = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, Screen_W, Screen_H, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
|
||||
if (m_window == nullptr)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL could not Create Window! Error: %s\n", SDL_GetError());
|
||||
m_isRunning = false;
|
||||
}
|
||||
// 关闭原生鼠标
|
||||
SDL_ShowCursor(0);
|
||||
// 打开所有检测到的控制器
|
||||
int numControllers = SDL_NumJoysticks();
|
||||
for (int i = 0; i < numControllers; i++)
|
||||
@@ -48,16 +56,9 @@ void Game::Init(std::function<void()> CallBack)
|
||||
}
|
||||
}
|
||||
}
|
||||
// 创建渲染器
|
||||
m_renderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
if (m_renderer == nullptr)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL could not Create Renderer! Error: %s\n", SDL_GetError());
|
||||
m_isRunning = false;
|
||||
}
|
||||
// 启用渲染器的混合功能(必须,否则纹理混合模式无效)
|
||||
SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_BLEND);
|
||||
// SDL_RenderSetScale(m_renderer, 1.2, 1.2);
|
||||
// 创建OpenGL渲染器
|
||||
m_renderer = new RenderManager(m_window);
|
||||
|
||||
IMG_Init(IMG_INIT_PNG);
|
||||
|
||||
// 初始化SDL_mixer,支持OGG格式
|
||||
@@ -149,7 +150,9 @@ void Game::HandleEvents(SDL_Event *e)
|
||||
|
||||
void Game::Update(float deltaTime)
|
||||
{
|
||||
if (m_scene != nullptr)
|
||||
//调用松鼠的更新
|
||||
SquirrelEx::GetInstance().Update(deltaTime);
|
||||
if (m_scene != nullptr)
|
||||
m_scene->Update(deltaTime);
|
||||
if (m_uiScene != nullptr)
|
||||
m_uiScene->Update(deltaTime);
|
||||
@@ -167,12 +170,12 @@ void Game::Render()
|
||||
m_uiScene->PreRender();
|
||||
|
||||
// 清空渲染器后渲染
|
||||
SDL_RenderClear(m_renderer);
|
||||
m_renderer->ClearScreen();
|
||||
if (m_scene != nullptr)
|
||||
m_scene->Render();
|
||||
if (m_uiScene != nullptr)
|
||||
m_uiScene->Render();
|
||||
SDL_RenderPresent(m_renderer);
|
||||
m_renderer->SwapBuffer();
|
||||
}
|
||||
|
||||
void Game::Clear()
|
||||
@@ -188,7 +191,6 @@ void Game::Clear()
|
||||
}
|
||||
m_uiScene = nullptr;
|
||||
IMG_Quit();
|
||||
SDL_DestroyRenderer(m_renderer);
|
||||
SDL_DestroyWindow(m_window);
|
||||
SDL_Quit();
|
||||
}
|
||||
@@ -213,7 +215,7 @@ void Game::ChangeUIScene(RefPtr<Scene> scene)
|
||||
m_uiScene->Enter();
|
||||
}
|
||||
|
||||
SDL_Renderer *Game::GetRenderer()
|
||||
RenderManager *Game::GetRenderer()
|
||||
{
|
||||
return m_renderer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user