Skip to content

Instantly share code, notes, and snippets.

@ephphatha
Last active December 13, 2021 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ephphatha/d0e68a79f38e8762145bdc47a16f8483 to your computer and use it in GitHub Desktop.
Save ephphatha/d0e68a79f38e8762145bdc47a16f8483 to your computer and use it in GitHub Desktop.
Small program to trigger a bug(?) in SDL2 on Windows 11 using default direct3d renderer.
#include <string_view>
#include <SDL2/SDL.h>
void setColour(SDL_Renderer *renderer, uint8_t red, uint8_t green, uint8_t blue) {
if (SDL_SetRenderDrawColor(renderer, red, green, blue, SDL_ALPHA_OPAQUE) < 0) {
SDL_Log(SDL_GetError());
}
}
void recreateRenderer(SDL_Window *window, SDL_Renderer *&renderer, uint32_t flags, std::string_view message) {
SDL_DestroyRenderer(renderer);
renderer = SDL_CreateRenderer(window, -1, flags);
if (renderer == nullptr) {
SDL_Log(SDL_GetError());
}
SDL_RendererInfo info{};
if (SDL_GetRendererInfo(renderer, &info) < 0) {
SDL_Log(SDL_GetError());
}
else {
SDL_Log("Recreated %s renderer %s", message.data(), info.name);
}
}
int main(int argc, char* argv[])
{
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) {
SDL_Log(SDL_GetError());
}
auto window = SDL_CreateWindow("Test SDL Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, /*::SDL_WINDOW_ALLOW_HIGHDPI | ::SDL_WINDOW_RESIZABLE*/0);
if (window == nullptr) {
SDL_Log(SDL_GetError());
}
auto renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer == nullptr) {
SDL_Log(SDL_GetError());
}
if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0) {
SDL_Log(SDL_GetError());
}
SDL_Event event{};
while (true) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == ::SDL_KEYUP) {
switch (event.key.keysym.sym) {
case ::SDLK_ESCAPE: {
SDL_Quit();
return 0;
}
case ::SDLK_r: {
setColour(renderer, 255, 0, 0);
break;
}
case ::SDLK_g: {
setColour(renderer, 0, 255, 0);
break;
}
case ::SDLK_b: {
setColour(renderer, 0, 0, 255);
break;
}
case ::SDLK_RETURN: {
recreateRenderer(window, renderer, ::SDL_RENDERER_ACCELERATED | ::SDL_RENDERER_PRESENTVSYNC, "accelerated vsync");
break;
}
case ::SDLK_SLASH: {
recreateRenderer(window, renderer, ::SDL_RENDERER_ACCELERATED, "accelerated");
break;
}
case ::SDLK_BACKSLASH: {
recreateRenderer(window, renderer, ::SDL_RENDERER_PRESENTVSYNC, "vsync");
break;
}
case ::SDLK_QUOTE: {
recreateRenderer(window, renderer, 0, "no-flags");
break;
}
}
}
}
if (SDL_RenderClear(renderer) < 0) {
SDL_Log(SDL_GetError());
}
SDL_RenderPresent(renderer);
}
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment