错误:渲染器已与窗口关联

问题描述

我正在尝试建立一个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,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,1200,600))
            while (!app.handleEvents())
            {
                app.render();
                app.update();
            }

    SDL_DestroyWindow(app.getwindow());
    SDL_Quit();

    return EXIT_SUCCESS;

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)