Anti Aliasing in SDL2 using C#
at master 3.4 kB view raw
1using static SDL2.SDL; 2using System; 3 4IntPtr window; 5IntPtr renderer; 6 7bool is_running = true; 8 9SDL_WindowFlags flags = SDL_WindowFlags.SDL_WINDOW_OPENGL; 10 11if(SDL_Init(SDL_INIT_EVERYTHING) == 0) { 12 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2"); 13} 14 15Console.WriteLine("SDL Initialized"); 16 17window = SDL_CreateWindow("Anti Aliasing", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, flags); 18 19Console.WriteLine("Window Created"); 20 21renderer = SDL_CreateRenderer(window, 0, SDL_RendererFlags.SDL_RENDERER_ACCELERATED); 22SDL_SetRenderDrawBlendMode(renderer, SDL_BlendMode.SDL_BLENDMODE_BLEND); 23 24Console.WriteLine("Renderer Created"); 25 26double angle = 0; 27 28int renderQuality = 2; 29 30while(is_running) { 31 32 angle += 0.01; 33 34 while (SDL_PollEvent(out SDL_Event events) != 0) { 35 switch(events.type) { 36 case SDL_EventType.SDL_QUIT: 37 is_running = false; 38 break; 39 case SDL_EventType.SDL_KEYDOWN: 40 switch(events.key.keysym.sym) { 41 case SDL_Keycode.SDLK_1: 42 renderQuality = 0; 43 break; 44 case SDL_Keycode.SDLK_2: 45 renderQuality = 1; 46 break; 47 case SDL_Keycode.SDLK_3: 48 renderQuality = 2; 49 break; 50 } 51 break; 52 } 53 } 54 55 switch(renderQuality) { 56 case 0: 57 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); 58 break; 59 case 1: 60 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1"); 61 break; 62 case 2: 63 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2"); 64 break; 65 } 66 67 IntPtr tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, (int)SDL_TextureAccess.SDL_TEXTUREACCESS_TARGET, 500, 500); 68 SDL_SetRenderTarget(renderer, tex); 69 70 SDL_RenderClear(renderer); 71 72 SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); 73 74 SDL_Rect rect = new SDL_Rect(); 75 rect.x = 50; 76 rect.y = 50; 77 rect.w = 400; 78 rect.h = 400; 79 80 SDL_RenderFillRect(renderer, ref rect); 81 82 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); 83 84 SDL_SetRenderTarget(renderer, IntPtr.Zero); 85 86 SDL_FRect destrect; 87 destrect.x = 50; 88 destrect.y = 720 / 2 - 250; 89 destrect.w = 500; 90 destrect.h = 500; 91 92 SDL_RenderCopyExF(renderer, tex, IntPtr.Zero, ref destrect, angle, IntPtr.Zero, SDL_RendererFlip.SDL_FLIP_NONE); 93 SDL_DestroyTexture(tex); 94 95 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); 96 97 IntPtr tex2 = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, (int)SDL_TextureAccess.SDL_TEXTUREACCESS_TARGET, 500, 500); 98 SDL_SetRenderTarget(renderer, tex2); 99 100 SDL_RenderClear(renderer); 101 102 SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); 103 104 SDL_Rect rect2 = new SDL_Rect(); 105 rect2.x = 50; 106 rect2.y = 50; 107 rect2.w = 400; 108 rect2.h = 400; 109 110 SDL_RenderFillRect(renderer, ref rect2); 111 112 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); 113 114 SDL_SetRenderTarget(renderer, IntPtr.Zero); 115 116 SDL_FRect destrect2; 117 destrect2.x = 1280 - 550; 118 destrect2.y = 720 / 2 - 250; 119 destrect2.w = 500; 120 destrect2.h = 500; 121 122 SDL_RenderCopyExF(renderer, tex2, IntPtr.Zero, ref destrect2, angle, IntPtr.Zero, SDL_RendererFlip.SDL_FLIP_NONE); 123 SDL_DestroyTexture(tex2); 124 125 SDL_RenderPresent(renderer); 126}