C++ 错误:渲染器已与窗口关联
我正在尝试设置SDL项目,但收到以下错误消息:C++ 错误:渲染器已与窗口关联,c++,sdl-2,C++,Sdl 2,我正在尝试设置SDL项目,但收到以下错误消息: Renderer already associated with window 从以下功能: void Game::render() { renderer = SDL_CreateRenderer(window, -1, 0); if (renderer == NULL) std::cout << "Failed to create a renderer&quo
Renderer already associated with window
从以下功能:
void Game::render()
{
renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer == NULL)
std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
game.cpp:
#include "game.h"
bool Game::init()
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
return true;
else
std::cout << "Could not initialise SDL" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
bool Game::constructWindow(const char* windowName, uint16_t xWindowPos, uint16_t yWindowPos
, uint16_t windowWidth, uint16_t windowHeight, bool fullScreen)
{
window = SDL_CreateWindow(windowName, xWindowPos, yWindowPos, windowWidth, windowHeight, fullScreen);
if (!window)
std::cout << "Could not create window" << '\n' << "Error: " << SDL_GetError() << std::endl;
return window;
}
void Game::render()
{
renderer = SDL_CreateRenderer(window, -1, 0);
if (!renderer)
std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
void Game::update()
{
SDL_RenderPresent(renderer);
}
SDL_Window* Game::getWindow()
{
return window;
}
bool Game::handleEvents()
{
while (SDL_PollEvent(&event))
if (event.type == SDL_QUIT)
quit = true;
return quit;
}
在
while
循环中调用app.render()
(创建渲染器,尽管名称有误导性)绝对不是“一次创建渲染器”。您可能应该在constructWindow
中创建渲染器,然后在render
中进行实际渲染。哦,对不起,我没有注意到这一点。它现在可以工作了,thanksI按照您的建议做了,将函数的名称更改为ConstructionWindowandRender
,并只留下render
函数来实际绘制内容。
#include "game.h"
bool Game::init()
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
return true;
else
std::cout << "Could not initialise SDL" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
bool Game::constructWindow(const char* windowName, uint16_t xWindowPos, uint16_t yWindowPos
, uint16_t windowWidth, uint16_t windowHeight, bool fullScreen)
{
window = SDL_CreateWindow(windowName, xWindowPos, yWindowPos, windowWidth, windowHeight, fullScreen);
if (!window)
std::cout << "Could not create window" << '\n' << "Error: " << SDL_GetError() << std::endl;
return window;
}
void Game::render()
{
renderer = SDL_CreateRenderer(window, -1, 0);
if (!renderer)
std::cout << "Failed to create a renderer" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
void Game::update()
{
SDL_RenderPresent(renderer);
}
SDL_Window* Game::getWindow()
{
return window;
}
bool Game::handleEvents()
{
while (SDL_PollEvent(&event))
if (event.type == SDL_QUIT)
quit = true;
return quit;
}
#include "game.h"
int main(int argc, char* argv[])
{
Game app;
if (app.init())
if (app.constructWindow("3D Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1200, 600))
while (!app.handleEvents())
{
app.render();
app.update();
}
SDL_DestroyWindow(app.getWindow());
SDL_Quit();
return EXIT_SUCCESS;
}