Anti Aliasing in SDL2 using C#
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}