SDL2修改像素

时间:2014-01-19 01:54:06

标签: c++ sdl pixel

我想用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调用之后定义的。 现在一切正常,我修复了缓冲区分配中的小错误,所以这段代码应该正常工作。

1 个答案:

答案 0 :(得分:1)

我不确定这是不是你的问题,但这是一个错误:

Uint32 *m_pPixels = (Uint32 *) malloc(1024*768);

如果您想分配足够的数据来表示表面中的像素,那么您需要* sizeof(Uint32)

Uint32 *m_pPixels = (Uint32 *) malloc(1024*768*sizeof(Uint32));

(如果这是C,你不需要演员。)