c - 使用 SDL2 的纹理逐像素渲染缓慢

标签 c sdl sdl-2

我正在尝试逐像素创建图像并使用 SDL 将其显示在屏幕上。图像必须刷新并再次显示每秒约 50 次(我正在寻找 50 FPS 的游戏)。我试图创建一个简单的程序来说明我想做什么:我创建一个 1280 * 720 的窗口和纹理,我交替填充绿色和红色。 问题是代码运行速度非常慢(~8 FPS)。我哪里搞砸了?

这是我的代码

  SDL_Texture   *display;
  SDL_Window    *window;
  SDL_Renderer  *renderer;
  int           x;
  int           y;
  int           a = 255;
  int           b = 0;

  window = SDL_CreateWindow(gl_title, SDL_WINDOWPOS_CENTERED,
                            SDL_WINDOWPOS_CENTERED, gl_width, gl_height, 0);
  renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED |
                                           SDL_RENDERER_TARGETTEXTURE |
                                           SDL_RENDERER_PRESENTVSYNC);
  display = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
                              SDL_TEXTUREACCESS_TARGET, gl_width, gl_height);
  while (true)
    {
      SDL_SetRenderTarget(renderer, display);
      SDL_SetRenderDrawColor(renderer, a, b, 0, 255);
      for (x = 0; x < gl_width; ++x)
        {
          for (y = 0; y < gl_height; ++y)
            {
              SDL_RenderDrawPoint(renderer, x, y);
            }
        }
      a = a == 255 ? 0 : 255;
      b = b == 255 ? 0 : 255;
      SDL_SetRenderTarget(renderer, NULL);
      SDL_RenderCopy(renderer, display, NULL, NULL);
      SDL_RenderPresent(renderer);
    }

最佳答案

为每个像素使用一个函数在屏幕上绘图会很慢。您可以在循环中手动编写像素并避免每次调用该函数的成本,或者使用 SDL 提供的函数之一为您执行此操作:

SDL_RenderFillRect

SDL_RenderDrawLines

SDL_RenderDrawPoints

SDL_RenderDrawRect

关于c - 使用 SDL2 的纹理逐像素渲染缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27344437/

相关文章:

c - 是否可以通过修改 inode 数据结构和 super block 来连接同一 linux 文件系统上的两个文件?

c - 如何使用 SWIG 在 C 中构建 Perl 哈希?

c - 我无法在文件中添加全名,只能添加一个字符,那么如何在文件中添加完整字符串?

c - 获取 "Message from debugger: Error 1"- 对于简单项目(在 Xcode 11.0 11A420a 中)

c - 调整窗口大小后 SDL2 无法正确渲染

c++ - 如何在 SDL 2 中获取并保存 BMP 屏幕截图?

c++ - SDL_Renderer 无效的原因是什么?

c++ - SDL_image 超出范围

C++ - SDL2 和 OpenGL - Visual Studio 错误 LNK2019 : unresolved external symbol

c++ - SDL 无法通过 2.1 Mac OSX Yosemite 加载 OpenGL 上下文