我想用SDL2修改单个像素,我不想用表面来做。
以下是我的代码的相关部分:
// Create a texture for drawing
SDL_Texture *m_pDrawing = SDL_CreateTexture(m_pRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, 1024, 768);
// Create a pixelbuffer
Uint32 *m_pPixels = (Uint32 *) malloc(1024*768*sizeof(Uint32));
// Set a single pixel to red
m_pPixels[1600] = 0xFF0000FF;
// Update the texture with created pixelbuffer
SDL_UpdateTexture(m_pDrawing, NULL, m_pPixels, 1024*sizeof(Uint32));
// Copy texture to render target
SDL_RenderCopy(m_pRenderer, m_pDrawing, NULL, NULL);
如果它被渲染,那么使用SDL_RenderPresent(m_pRenderer)屏幕上不会出现任何内容。 Here他们解释说你可以使用“surface-> pixel,或malloc()'d buffer”。那么,怎么了?
编辑: 最后,它只是我的m_pRenderer,它是在SDL_CreateTexture调用之后定义的。 现在一切正常,我修复了缓冲区分配中的小错误,所以这段代码应该正常工作。
答案 0 :(得分:1)
我不确定这是不是你的问题,但这是一个错误:
Uint32 *m_pPixels = (Uint32 *) malloc(1024*768);
如果您想分配足够的数据来表示表面中的像素,那么您需要* sizeof(Uint32)
:
Uint32 *m_pPixels = (Uint32 *) malloc(1024*768*sizeof(Uint32));
(如果这是C,你不需要演员。)