Could someone with a retina Mac please try this code?

"oviano" <[email protected]> Wed, 04 Jan 2017 12:33:22 +0000
Newsgroups gmane.comp.lib.sdl
Message-ID <[email protected]>
It should draw a small black rectangle towards the top left of the screen, on a background that alternates between red, green and blue.

The problem is it (and things like drawing textures) only works for me if SDL_WINDOW_ALLOW_HIGHDPI is left commented out during window creation.

I'm trying to establish if it's a peculiarity with my machine or a bug in SDL.

I've tried debugging it a little but none of the lower level GL_XXX functions are failing, no errors are produced, yet the SDL_RenderFillRect doesn't draw anything?


Code:

#include <SDL2/SDL.h>

static SDL_Window* window = NULL;
static SDL_Renderer* renderer = NULL;

static void clean_up(void);

int main(int argc, char** argv)
{
start:
	if (SDL_Init(SDL_INIT_VIDEO) < 0)
	{
		printf("Error initialising SDL library (%s)\n", SDL_GetError());
        clean_up();
        return 1;
	}

	SDL_DisplayMode desktop_dm;
	if (SDL_GetDesktopDisplayMode(0, &desktop_dm) < 0)
	{
		printf("Error getting desktop display mode (%s)\n", SDL_GetError());
        clean_up();
        return 1;
	}
    
	if (!(window = SDL_CreateWindow("Test", 0, 0, desktop_dm.w, desktop_dm.h,
                                    SDL_WINDOW_FULLSCREEN | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL)))
	{
		printf("Error creating window (%s)\n", SDL_GetError());
        clean_up();
        return 1;
	}

	if (!(renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC)))
	{
		printf("Error creating renderer (%s)\n", SDL_GetError());
        clean_up();
        return 1;
	}

	SDL_RendererInfo info;
	if (SDL_GetRendererInfo(renderer, &info) < 0)
	{
		printf("Error getting renderer info (%s)\n", SDL_GetError());
        clean_up();
        return 1;
	}

    int32_t render_w, render_h;
    if (SDL_GetRendererOutputSize(renderer, &render_w, &render_h) < 0)
    {
        printf("Error getting rendering size (%s)\n", SDL_GetError());
        clean_up();
        return 1;
    }

    printf("Renderer is %s, size %d x %d\n", info.name, render_w, render_h);
    
    int32_t render_time = 1000 / desktop_dm.refresh_rate;

    uint32_t update_time = 0;
    uint32_t update_index = 0;
    
    bool stop = false;

    while (!stop)
	{
        uint32_t start_time = SDL_GetTicks();

		SDL_Event event;
		while (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
			case SDL_QUIT:
				stop = true;
				break;
			}
		}

        if (SDL_GetTicks() - update_time > 1000)
        {
            SDL_SetRenderTarget(renderer, NULL);
            SDL_SetRenderDrawColor(renderer,
                                   update_index % 3 == 0 ? 255 : 0,
                                   update_index % 3 == 1 ? 255 : 0,
                                   update_index % 3 == 2 ? 255 : 0, 255);
            SDL_RenderClear(renderer);
			SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
			SDL_Rect rect;
			rect.x = 100;
			rect.y = 100;
			rect.w = 100;
			rect.h = 100;
			SDL_RenderFillRect(renderer, &rect);
	        SDL_RenderPresent(renderer);
			
            update_time = SDL_GetTicks();
            update_index ++;
        }

        uint32_t elapsed_time = SDL_GetTicks() - start_time;;
		if (elapsed_time < render_time)
		{
            SDL_Delay(render_time - elapsed_time);
		}
	}

	clean_up();

	return 0;
}

void clean_up(void)
{
	if (renderer)
	{
		SDL_DestroyRenderer(renderer);
		renderer = NULL;
	}

	if (window)
	{
		SDL_DestroyWindow(window);
		window = NULL;
	}

	SDL_Quit();
}

_______________________________________________
SDL mailing list
[email protected]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org