Closed chilicat closed 4 years ago
Hi @chilicat, it seems to be the same with the C version below. I tried on Linux which worked but then it didn't work when I tried on macOS Mojave. I modified it a bit to have event loop which sometimes help but it still happens. I posted a question on the SDL2 Discourse here.
#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;
}
Hi @chilicat, it seems like it is a bug in SDL2. It's been fixed in Mercurial so it should be okay in the next release of SDL2!
Ok, I close the ticket since it is an upstream issue. Thanks @veeableful.
consider the following example. It creates two viewports and draws a simple rect into each. I would expect to see a blue rect at 0,0 and a green rect at 200,0 but I only see the blue rect.
` renderer.SetDrawColor(0, 0, 0, 0) renderer.Clear() rect := &sdl.Rect{0, 0, 100, 100}
`
go-sdl2: v0.4.0 Platform: MacOS Mojave