c++ - 错误:渲染器已与窗口关联
问题描述
我正在尝试设置一个 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" << '\n' << "Error: " << SDL_GetError() << std::endl;
}
我只做了一次窗口和渲染器,它们是分开的,所以我不知道为什么会发生这种情况。我在 SO 上发现了另一个具有相同错误的问题,但显然他遇到了问题,因为SDL_GetWindowSurface()
被调用但我没有调用该函数。以下是我的代码。感谢您的帮助。
game.h:
#pragma once
#include <iostream>
#include "SDL.h"
class Game
{
public:
bool init();
bool constructWindow
(
const char* windowName,
unsigned int xWindowPos,
unsigned int yWindowPos,
unsigned int windowWidth,
unsigned int windowHeight,
bool fullScreen = false
);
void render();
void update();
SDL_Window* getWindow();
bool handleEvents();
protected:
private:
SDL_Window* window = nullptr;
SDL_Renderer* renderer = nullptr;
SDL_Event event;
bool quit = false;
};
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;
}
main.cpp
#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;
}
解决方案
推荐阅读
- javascript - 根据某些条件从嵌套的 Javascript 对象中获取键
- entity-framework - 运行我的颤振应用程序时出现 Gradle 错误
- google-cloud-platform - GCP 云运行限制
- mysql - 如何针对从 INFORMATION_SCHEMA.TABLES 捕获表名的查询结果运行 SQL UPDATE?
- lua - 试图将“self”索引为 nil 值
- cmake - Zephyr / PlatformIO / CMake / 外部代码
- linux - 输入中两个命令的 Linux ssh 输出
- python - Default MaxPoolingOp only support NHWC on device type CPU [[{{node maxpool4/MaxPool}}]] 是什么意思?
- javascript - javascript中奇怪的日期问题
- azure-cosmosdb - 从 Document DB SDK (2.7.0) 更新到 Cosmos SDK (3.12.0)