[英]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.