mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This example creates an SDL window and renderer, and then draws some lines,
 | |
|  * rectangles and points to it every frame.
 | |
|  *
 | |
|  * This code is public domain. Feel free to use it for any purpose!
 | |
|  */
 | |
| 
 | |
| #define SDL_MAIN_USE_CALLBACKS 1  /* use the callbacks instead of main() */
 | |
| #include <SDL3/SDL.h>
 | |
| #include <SDL3/SDL_main.h>
 | |
| 
 | |
| /* We will use this renderer to draw into this window every frame. */
 | |
| static SDL_Window *window = NULL;
 | |
| static SDL_Renderer *renderer = NULL;
 | |
| static SDL_FPoint points[500];
 | |
| 
 | |
| /* This function runs once at startup. */
 | |
| SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
 | |
| {
 | |
|     int i;
 | |
| 
 | |
|     SDL_SetAppMetadata("Example Renderer Primitives", "1.0", "com.example.renderer-primitives");
 | |
| 
 | |
|     if (!SDL_Init(SDL_INIT_VIDEO)) {
 | |
|         SDL_Log("Couldn't initialize SDL: %s", SDL_GetError());
 | |
|         return SDL_APP_FAILURE;
 | |
|     }
 | |
| 
 | |
|     if (!SDL_CreateWindowAndRenderer("examples/renderer/primitives", 640, 480, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
 | |
|         SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
 | |
|         return SDL_APP_FAILURE;
 | |
|     }
 | |
|     SDL_SetRenderLogicalPresentation(renderer, 640, 480, SDL_LOGICAL_PRESENTATION_LETTERBOX);
 | |
| 
 | |
|     /* set up some random points */
 | |
|     for (i = 0; i < SDL_arraysize(points); i++) {
 | |
|         points[i].x = (SDL_randf() * 440.0f) + 100.0f;
 | |
|         points[i].y = (SDL_randf() * 280.0f) + 100.0f;
 | |
|     }
 | |
| 
 | |
|     return SDL_APP_CONTINUE;  /* carry on with the program! */
 | |
| }
 | |
| 
 | |
| /* This function runs when a new event (mouse input, keypresses, etc) occurs. */
 | |
| SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
 | |
| {
 | |
|     if (event->type == SDL_EVENT_QUIT) {
 | |
|         return SDL_APP_SUCCESS;  /* end the program, reporting success to the OS. */
 | |
|     }
 | |
|     return SDL_APP_CONTINUE;  /* carry on with the program! */
 | |
| }
 | |
| 
 | |
| /* This function runs once per frame, and is the heart of the program. */
 | |
| SDL_AppResult SDL_AppIterate(void *appstate)
 | |
| {
 | |
|     SDL_FRect rect;
 | |
| 
 | |
|     /* as you can see from this, rendering draws over whatever was drawn before it. */
 | |
|     SDL_SetRenderDrawColor(renderer, 33, 33, 33, SDL_ALPHA_OPAQUE);  /* dark gray, full alpha */
 | |
|     SDL_RenderClear(renderer);  /* start with a blank canvas. */
 | |
| 
 | |
|     /* draw a filled rectangle in the middle of the canvas. */
 | |
|     SDL_SetRenderDrawColor(renderer, 0, 0, 255, SDL_ALPHA_OPAQUE);  /* blue, full alpha */
 | |
|     rect.x = rect.y = 100;
 | |
|     rect.w = 440;
 | |
|     rect.h = 280;
 | |
|     SDL_RenderFillRect(renderer, &rect);
 | |
| 
 | |
|     /* draw some points across the canvas. */
 | |
|     SDL_SetRenderDrawColor(renderer, 255, 0, 0, SDL_ALPHA_OPAQUE);  /* red, full alpha */
 | |
|     SDL_RenderPoints(renderer, points, SDL_arraysize(points));
 | |
| 
 | |
|     /* draw a unfilled rectangle in-set a little bit. */
 | |
|     SDL_SetRenderDrawColor(renderer, 0, 255, 0, SDL_ALPHA_OPAQUE);  /* green, full alpha */
 | |
|     rect.x += 30;
 | |
|     rect.y += 30;
 | |
|     rect.w -= 60;
 | |
|     rect.h -= 60;
 | |
|     SDL_RenderRect(renderer, &rect);
 | |
| 
 | |
|     /* draw two lines in an X across the whole canvas. */
 | |
|     SDL_SetRenderDrawColor(renderer, 255, 255, 0, SDL_ALPHA_OPAQUE);  /* yellow, full alpha */
 | |
|     SDL_RenderLine(renderer, 0, 0, 640, 480);
 | |
|     SDL_RenderLine(renderer, 0, 480, 640, 0);
 | |
| 
 | |
|     SDL_RenderPresent(renderer);  /* put it all on the screen! */
 | |
| 
 | |
|     return SDL_APP_CONTINUE;  /* carry on with the program! */
 | |
| }
 | |
| 
 | |
| /* This function runs once at shutdown. */
 | |
| void SDL_AppQuit(void *appstate, SDL_AppResult result)
 | |
| {
 | |
|     /* SDL will clean up the window/renderer for us. */
 | |
| }
 | |
| 
 | 
