相关疑难解决方法(0)

仅当使用SDL_RENDERER_SOFTWARE创建渲染器时,SDL2程序才有效

我已经使用C ++和SDL2编写了一个程序:

  1. 创建一个窗口
  2. 获取窗户的表面
  3. 为窗口创建渲染器
  4. 在窗口上渲染一些填充的矩形
  5. 从窗口表面创建纹理
  6. 清除屏幕
  7. 在窗口上渲染一些实心圆
  8. 从窗口表面创建第二个纹理
  9. 进入事件循环,每次按下一个键:
  10. 如果当前正在显示圆形,则使用SDL_RenderCopy()将正方形纹理复制到窗口。
  11. 否则,如果当前正在显示正方形,则将圆形纹理复制到窗口。

如果使用SDL_RENDERER_SOFTWARE标志创建渲染器,则该程序可以完美运行。

如果使用该SDL_RENDERER_ACCELERATED标志创建了渲染器,我发现虽然可以直接渲染到屏幕,但是如果我从窗口表面创建了几个不同的纹理,然后尝试使用SDL_RenderCopy();将它们复制回窗口。我所看到的只是一个黑色的窗户。

我找不到任何失败的SDL调用。

我想知道纹理格式和渲染器之间是否可能不兼容-但我不确定如何跟进。

有什么帮助或建议吗?

我的环境是:

  • Windows 10
  • Visual Studio社区2015
  • SDL2版本2.0.4

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

附加信息和源代码:

我添加了缩减的源代码来演示以下问题。

注意,为了减小大小,我删除了所有错误检查,并将相关代码合并为一个主要函数。

我得到的是,如果我取消注释第40行,那么该程序将按预期运行,从而使我SDL_CreateRenderer使用该SDL_RENDERER_SOFTWARE标志进行调用。

如果我取消对其他任何SDL_CreateRenderer一行的注释(第41-43行:使用硬件加速),则在最初将它们渲染到屏幕上时会看到红色和蓝色方块。

但是,当我按下按键时,不是看着窗口在红色和蓝色方块之间滑动,而是看着黑色的窗口。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include <string>


//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;


int main(int argc, char* args[])
{

    //The window we'll be rendering to
    SDL_Window* gWindow = …
Run Code Online (Sandbox Code Playgroud)

c++ sdl sdl-2

0
推荐指数
1
解决办法
1414
查看次数

标签 统计

c++ ×1

sdl ×1

sdl-2 ×1