SDL不渲染像素
SDL not rendering pixels
我试图改变我的窗口的背景颜色在SDL像素级访问(我正在做一个粒子爆炸),但背景保持白色。
首先,我尝试使用memset将像素的内存设置为0x00,以将颜色更改为黑色(我使用memset,因为我遵循使用它的教程)
memset(buffer, 0x00, SCREEN_WIDTH * SCREEN_HEIGHT * sizeof(Uint32));
由于这不起作用,我查找了如何更改渲染器的绘制颜色,并提出:
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 255);
这是我的纹理,Renderer和Buffer代码,以及我如何设置窗口(SCREEN_WIDTH和SCREEN_HEIGHT分别设置为800和600):
SDL_Window* window = SDL_CreateWindow("Fire Particle Explosion",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, SCREEN_WIDTH, SCREEN_HEIGHT);
Uint32* buffer = new Uint32[SCREEN_WIDTH * SCREEN_HEIGHT];
SDL_UpdateTexture(texture, NULL, buffer, SCREEN_WIDTH * sizeof(Uint32));
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
如何正确地逐像素更改背景,为什么我尝试的两种方法都不起作用?
您不需要在内存中操作缓冲区来实现这一点,并且您可能不需要纹理。推荐使用SDL2中的"2D加速渲染"功能。
首先,不使用"SDL_RENDERER_PRESENTVSYNC"参数,使用"0"代替。在Linux上,一些旧的图形驱动程序使用该标志产生闪烁。
这应该会将屏幕擦除为黑色:
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 255);
SDL_RenderClear(renderer);
我强烈建议你使用SDL_RenderDrawPoint()来逐像素更新屏幕。它是硬件加速的
基本上,这是在你的游戏循环中发生的事情:- set the color to black, then erase the screen with SDL_RenderClear()
- for each point to draw, first set the draw color, then draw the point
- use SDL_RenderPresent()
我用C写了一个小的SDL2代码例子,用于制作粒子爆炸:drawpoints
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- SDL:程序运行正常;仅绘制两行像素
- SDL 从纹理中读取像素
- SDL:使现有表面透明/删除所有像素数据
- c++ /SDL:褪去已经具有逐像素alpha信息的表面
- 如何在SDL上加载原始像素位图
- SDL不渲染像素