Unable to render on multiple viewports on macOS Mojave

Hi guys, it seems like I can’t render on multiple viewports on macOS Mojave with SDL 2.0.10. I have the sample code below. On Linux however, it seems to work. Did I miss something?

#include <SDL2/SDL.h>

static const int WINDOW_WIDTH  = 800;
static const int WINDOW_HEIGHT = 600;

int main()
{
	SDL_Init(SDL_INIT_EVERYTHING);

	SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, 0);
	SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
	SDL_bool running = SDL_TRUE;

	while (running) {
		SDL_Event event;

		while (SDL_PollEvent(&event)) {
			switch (event.type) {
			case SDL_QUIT:
				running = SDL_FALSE;
				break;
			}
		}

		SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
		SDL_RenderClear(renderer);
		SDL_Rect rect = {0, 0, 100, 100};

		SDL_Rect viewport1 = {0, 0, 100, 100};
		SDL_RenderSetViewport(renderer, &viewport1);
		SDL_SetRenderDrawColor(renderer, 0, 0, 255, 0);
		SDL_RenderFillRect(renderer, &rect);

		SDL_Rect viewport2 = {200, 0, 100, 100};
		SDL_RenderSetViewport(renderer, &viewport2);
		SDL_SetRenderDrawColor(renderer, 0, 255, 0, 0);
		SDL_RenderFillRect(renderer, &rect);

		SDL_RenderPresent(renderer);
		SDL_Delay(16);
	}

	SDL_DestroyRenderer(renderer);
	SDL_DestroyWindow(window);
	SDL_Quit();

	return 0;
}

This was a bug in the Metal renderer. It’s fixed, thanks!
https://hg.libsdl.org/SDL/rev/22308b7ba06c

1 Like

Ah I see. Thank you for such a quick fix!