SDL 1.3 backend: Questions about Framebuffers

Hello all,

I notice that to write to the window, you have to create a frame buffer- or
at least retrieve the data representing one.

Here’s my problem: I am given the pixel array to fill, the address of which
is passed on to SDL. This is all well and good. But if the window changes
size, my pixel array has to change size (there are problems if the window
moves or the screen resolution changes, too, but I think that I can overcome
this with a copy of the buffer). I know when the window resizes, and can
allocate accordingly; but how do I tell SDL to change its pointer to the
framebuffer, or copy thereof?

Thanks,
-Nathan

Here’s my problem: I am given the pixel array to fill, the address of
which is passed on to SDL. This is all well and good. But if the
window changes size, my pixel array has to change size (there are
problems if the window moves or the screen resolution changes, too, but
I think that I can overcome this with a copy of the buffer). I know
when the window resizes, and can allocate accordingly; but how do I tell
SDL to change its pointer to the framebuffer, or copy thereof?

When the OS tells you that the window has been resized, you need to call
this…

  SDL_SendWindowEvent(my_sdl_window, SDL_WINDOWEVENT_RESIZED, w, h);

…and eventually SDL, at some higher level, will call
SDL_OnWindowResized(), which lets the system know that the existing
framebuffer is gone. The next time it needs a framebuffer, it will call
your driver’s CreateWindowFramebuffer() implementation again.

SDL will not make any attempt to free the array you provide in
CreateWindowFramebuffer. If you need to free or realloc this buffer when
the window resizes or is destroyed, it is your responsibility to do it!
Once the system decides a framebuffer isn’t valid, due to a resize
event, it just simply never touches that pointer again (but if the
pointer is still usable for some reason, you can just hand it to SDL
again when it re-calls CreateWindowFramebuffer()).

If the app called SDL_SetWindowSize(), then SDL will eventually call
SDL_OnWindowResized() for the same result. You’re still responsible for
dealing with the framebuffer pointer (realloc or whatever in your
SetWindowSize() implementation), but you don’t call SDL_SendWindowEvent
in this case.

–ryan.