【发布时间】:2015-10-16 21:24:41
【问题描述】:
我需要创建一个窗口,并用颜色填充它的所有像素。这不应该太难,但一个小时左右后我仍然无法让它工作。这是我现在的代码:
#include <SDL2/SDL.h>
int main(int argc, char** argv)
{
enum {
WIDTH = 640,
HEIGHT = 480
};
SDL_Window* window = SDL_CreateWindow(
"SDL test",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
WIDTH,
HEIGHT,
SDL_WINDOW_SHOWN
);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Texture* texture = SDL_CreateTexture(renderer,
SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_STREAMING,
WIDTH,
HEIGHT
);
SDL_Surface* surface = SDL_CreateRGBSurface(
0,
WIDTH,
HEIGHT,
32,
0x00000000,
0x00000000,
0x00000000,
0xff000000
);
Uint32 gray = SDL_MapRGBA(surface->format, 0x1E, 0x1E, 0x1E, 0xFF);
Uint32 red = SDL_MapRGBA(surface->format, 0xFA, 0x32, 0x32, 0xFF);
int i, j;
Uint32* pixels32 = (Uint32*) surface->pixels;
for (i = 0; i < HEIGHT; ++i)
{
for (j = 0; j < WIDTH; ++j)
{
pixels32[i * WIDTH + j] = j%10 ? gray : red;
}
}
SDL_UpdateTexture(texture, NULL, surface->pixels, surface->pitch);
SDL_RenderPresent(renderer);
int quit = 0;
SDL_Event event;
while (!quit)
{
while (SDL_PollEvent(&event) != 0)
{
if (event.type == SDL_QUIT)
quit = 1;
}
}
SDL_FreeSurface(surface);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
但它显示一个白色窗口。我做错了什么?
【问题讨论】:
-
当您处于程序关闭阶段时,您为什么要
SDL_RenderPresent? -
@Rhymoid 哦,错了,当我想移动
SDL_FreeSurface函数时,我也移动了它。现在我看到一个黑色的窗口,太棒了。 -
至少颜色不同。现在,您是否尝试过使用
SDL_RenderCopy(或其-Ex 变体)将纹理实际blitting 到表面? -
@Rhymoid 当我把它放在
SDL_UpdateTexture和SDL_RenderPresent函数之间时它起作用了。谢谢!如果您将其发布为答案,我会接受。