I'm working on Windows (MinGW64), though I suspect the problem will exist on MacOS and Linux too. Not sure though.
Given the following code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL2/SDL.h>
#define WIDTH 800
#define HEIGHT 600
#define LOGICAL_WIDTH 320
#define LOGICAL_HEIGHT 240
int main(int argc, char *argv[]) {
(void)argc; (void)argv; // Prevent unused parameters warnings
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow("Problem", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_RESIZABLE);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
SDL_RenderSetLogicalSize(renderer, LOGICAL_WIDTH, LOGICAL_HEIGHT);
SDL_Texture *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING, LOGICAL_WIDTH, LOGICAL_HEIGHT);
// Create pixels array and fill it in white
uint8_t *pixels = malloc(LOGICAL_WIDTH * LOGICAL_HEIGHT * 4);
memset(pixels, 255, LOGICAL_WIDTH * LOGICAL_HEIGHT * 4);
SDL_Event event;
while (1) {
if (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
break;
}
}
SDL_UpdateTexture(texture, NULL, pixels, LOGICAL_WIDTH * 4);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
free(pixels);
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
If I resize the window, the white background is centered correctly. However, if I drag the caption of the window and resize it, the background is not centered while dragging, only after freeing.
Related questions: Getting Contiunous Window Resize Event in SDL 2
Is there a way to work around that?