8-битные поверхности в SDL 2

Первоначально в 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 не предлагает способа установить bbp окна или поверхности. Кажется, по умолчанию 32 бита. Я пытался использовать SDL_ConvertSurfaceFormat, но surface->format->BitsPerPixel остается равным 32.

Как я могу создать 8-битную поверхность в SDL 2? Я понимаю, что мне понадобится цветовая палитра.


person Tyler0425    schedule 02.06.2015    source источник


Ответы (1)


Используйте 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);
person doqtor    schedule 02.06.2015
comment
Спасибо. Как установить это как поверхность window? - person Tyler0425; 02.06.2015
comment
@ Tyler0425 Добавлен пример. - person doqtor; 02.06.2015
comment
Мне придется использовать текстуру и визуализатор? - person Tyler0425; 02.06.2015
comment
@Tyler0425 Tyler0425 Я не уверен, что вы можете обойтись без этого, посмотрите MigrationGuide - person doqtor; 02.06.2015
comment
Спасибо за вашу помощь. Мне удалось заставить все работать, за исключением случаев, когда я использую это с 8-битной поверхностью, цветовая палитра поверхности не затрагивается в процессе рендеринга, поэтому все цвета перепутаны. - person Tyler0425; 02.06.2015
comment
@ Tyler0425 вам нужно будет опубликовать свой код, показывающий проблему - person doqtor; 02.06.2015