SDL 2中的8位表面

3

在SDL中,以下代码可用于设置表面:

SDL_Surface *screen = SDL_SetVideoMode(800, 600, 8, 0);

现在,在SDL2中,必须使用以下代码:
SDL_Window *window = SDL_CreateWindow("Title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0);
SDL_Surface *surface = SDL_GetWindowSurface(window);

我的问题是SDL_CreateWindow没有提供设置窗口或表面位深度的方法。它似乎默认为32位。我尝试使用SDL_ConvertSurfaceFormat,但surface->format->BitsPerPixel仍保持在32位。
如何在SDL 2中创建8位表面?我意识到我需要一个调色板。
1个回答

2
使用SDL_CreateRGBSurface,可以指定位数。
例如:
SDL_Window *sdlWindow;
SDL_Renderer *sdlRenderer;
SDL_CreateWindowAndRenderer(0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP, &sdlWindow, &sdlRenderer);

SDL_Surface *screen = SDL_CreateRGBSurface(0, 640, 480, 32,
                                    0x00FF0000,
                                    0x0000FF00,
                                    0x000000FF,
                                    0xFF000000);
SDL_Texture *sdlTexture = SDL_CreateTexture(sdlRenderer,
                                        SDL_PIXELFORMAT_ARGB8888,
                                        SDL_TEXTUREACCESS_STREAMING,
                                        640, 480);

SDL_UpdateTexture(sdlTexture, NULL, screen->pixels, screen->pitch);
SDL_RenderClear(sdlRenderer);
SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
SDL_RenderPresent(sdlRenderer);

谢谢。我该如何将其设置为“窗口”的表面? - Tyler0425
@Tyler0425已添加示例。 - doqtor
我需要使用纹理和渲染器吗? - Tyler0425
@Tyler0425 我不确定你是否可以不需要它,看一下迁移指南 - doqtor
谢谢你的帮助。我已经成功让所有东西都能正常工作了,除了当我在使用8位表面时,表面的颜色调色板在渲染过程中没有被处理,所以所有的颜色都混乱了。 - Tyler0425
1
@Tyler0425,您需要发布您的代码以展示问题。 - doqtor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接