繁体   English   中英

使用SDL2的纹理进行缓慢的每像素渲染

[英]Slow pixel per pixel rendering with SDL2's textures

我正在尝试创建每个像素的图像,并使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM