Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SDL-SDL_DestroyTexture()上的纹理错误无效 我用C++制作了一个小型的“复古风格”2D平板游戏。我认为,保持游戏低分辨率的最佳方法是将所有内容渲染为低分辨率纹理,然后将该纹理渲染为整个窗口(窗口大小/分辨率由用户设置),同时允许使用不同大小的显示器拉伸游戏窗口以适应其设置_C++_Sdl 2 - Fatal编程技术网

SDL-SDL_DestroyTexture()上的纹理错误无效 我用C++制作了一个小型的“复古风格”2D平板游戏。我认为,保持游戏低分辨率的最佳方法是将所有内容渲染为低分辨率纹理,然后将该纹理渲染为整个窗口(窗口大小/分辨率由用户设置),同时允许使用不同大小的显示器拉伸游戏窗口以适应其设置

SDL-SDL_DestroyTexture()上的纹理错误无效 我用C++制作了一个小型的“复古风格”2D平板游戏。我认为,保持游戏低分辨率的最佳方法是将所有内容渲染为低分辨率纹理,然后将该纹理渲染为整个窗口(窗口大小/分辨率由用户设置),同时允许使用不同大小的显示器拉伸游戏窗口以适应其设置,c++,sdl-2,C++,Sdl 2,当我运行此设置时,游戏完全按照它应该的方式工作,并且呈现良好(全屏模式和窗口模式)。但是,当我使用SDL_DestroyTexture()释放低分辨率渲染目标纹理时,控制台会弹出“错误:无效纹理”。我已使用调试器确认这就是错误发生的地方。下面是创建、使用和销毁纹理的相关代码。当我可以正常使用纹理时,为什么纹理突然无效 // SDL is initialized // "proxy" is the texture used for render-to-texture // it is set t

当我运行此设置时,游戏完全按照它应该的方式工作,并且呈现良好(全屏模式和窗口模式)。但是,当我使用SDL_DestroyTexture()释放低分辨率渲染目标纹理时,控制台会弹出“错误:无效纹理”。我已使用调试器确认这就是错误发生的地方。下面是创建、使用和销毁纹理的相关代码。当我可以正常使用纹理时,为什么纹理突然无效

// SDL is initialized

// "proxy" is the texture used for render-to-texture
// it is set to the "logical" low resolution (lxres, lyres) (usually 320x240)
// renderer is an SDL_Renderer* that initializes with no problems
SDL_Texture* proxy = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
                         SDL_TEXTUREACCESS_TARGET, lxres, lyres);

SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);

// game runs fine
while (!quit) {
    SDL_SetRenderTarget(renderer, proxy);
    render();
    SDL_SetRenderTarget(renderer, nullptr);
    // stretch the low resolution texture onto the at-least-as-high resolution
    // renderer (usually 640x480)
    SDL_RenderCopy(renderer, proxy, nullptr, nullptr);
    SDL_RenderPresent(renderer);
    SDL_RenderClear(renderer);
    updateLogic();
}

// Time to quit
SDL_SetRenderTarget(renderer, nullptr);
if (proxy != nullptr)
    SDL_DestroyTexture(proxy);    // "ERROR: Invalid texture"

// Clean up other resources

// close SDL

当我在销毁渲染器之前销毁了它所附着的纹理时,我遇到了这种类型的错误。

我记不起我的错误是什么,但当我在销毁渲染器之前销毁了它所附着的纹理时,我遇到了这种类型的错误。这里的情况似乎不是这样,但我只是看看你的代码,没有发现任何错误。您是否尝试过将其作为SDL_TEXTUREACCESS_STATIC and comenting render()和SDL_SetRenderTarget,看看这是否是问题所在。好的,我认为检查渲染器何时被破坏解决了问题。updateLogic()在设置quit=true时破坏了代理渲染器(这是我的一个错误),因此纹理在渲染器之后被破坏。在纹理后再次删除渲染器时,我没有得到segfault的唯一原因是,当删除内容时,我在所有地方都进行了null检查。我从来都不知道,在破坏了使用渲染器创建的纹理之后,必须要破坏渲染器。但我想我现在知道了。谢谢你的帮助!很高兴我帮了忙。既然它解决了你的问题,我应该把它作为答案吗?(所以其他人可以把它看作是一个问题的答案)是的,把它作为一个答案,因为它几乎解决了这个问题。好的,你现在只需要接受它