Skip to content

Instantly share code, notes, and snippets.

@haxpor
Last active October 10, 2023 00:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haxpor/c02a6ba98e3ff35800eeb3a4f4f5b0b4 to your computer and use it in GitHub Desktop.
Save haxpor/c02a6ba98e3ff35800eeb3a4f4f5b0b4 to your computer and use it in GitHub Desktop.
Getting rendering driver name and setting hint in SDL2. Minimal testing code. This code tested on macOS mojave.
#include <SDL2/SDL.h>
#include <stdio.h>
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
SDL_Log("failed to init: %s", SDL_GetError());
return -1;
}
window = SDL_CreateWindow(
"Hello", 0, 0, 640, 480,
SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL
);
if (window == NULL) {
SDL_Log("Failed to create window: %s", SDL_GetError());
return -1;
}
// set hint to use metal before calling SDL_CreateRenderer
// see possible values at SDL_hints.h
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "metal");
renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer == NULL)
{
SDL_Log("Failed to create renderer: %s", SDL_GetError());
return -1;
}
// get driver name and information here
// if setting hint taken into effect, then this should get you "metal"
SDL_RendererInfo rendererInfo;
SDL_GetRendererInfo(renderer, &rendererInfo);
SDL_Log("Renderer: %s", rendererInfo.name);
SDL_bool quit = SDL_FALSE;
while (!quit)
{
SDL_Event e;
// we need to call SDL_PollEvent to let window rendered, otherwise
// no window will be shown
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_QUIT)
{
quit = SDL_TRUE;
}
}
}
// free
if (renderer != NULL)
{
SDL_DestroyRenderer(renderer);
renderer = NULL;
}
if (window != NULL)
{
SDL_DestroyWindow(window);
window = NULL;
}
SDL_Quit();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment