-
-
Save spaceexperiment/d2b465ab071e821c84c925b7f20f3279 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "SDL.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
SDL_Window* create_window(){ | |
int posX = 100; | |
int posY = 100; | |
int width = 500; | |
int height = 500; | |
return SDL_CreateWindow( | |
"SDL Window", | |
posX, | |
posY, | |
width, | |
height, | |
SDL_WINDOW_OPENGL | |
); | |
} | |
SDL_Renderer* create_renderer(SDL_Window *window){ | |
return SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); | |
// SDL_RENDERER_ACCELERATED | |
// SDL_RENDERER_SOFTWARE | |
} | |
void destroy_and_quit(SDL_Window *window, SDL_Renderer *renderer){ | |
SDL_DestroyRenderer(renderer); | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
} | |
int input_quit(SDL_Event *event){ | |
SDL_PollEvent(event); | |
if (event->type == SDL_QUIT){ | |
printf("quiting\n"); | |
return 1; | |
} | |
return 0; | |
} | |
void draw(SDL_Renderer *renderer, SDL_Rect *rect1, SDL_Texture *texture){ | |
// SDL_SetRenderTarget(renderer, texture); | |
SDL_SetRenderDrawColor(renderer, 0x22, 0x22, 0x22, 0x00); | |
SDL_RenderClear(renderer); | |
SDL_RenderDrawRect(renderer, rect1); | |
SDL_SetRenderDrawColor(renderer, 0xbb, 0x00, 0x00, 0x00); | |
SDL_RenderFillRect(renderer, rect1); | |
// SDL_SetRenderTarget(renderer, NULL); | |
// SDL_RenderCopy(renderer, texture, NULL, NULL); | |
SDL_RenderPresent(renderer); | |
} | |
struct Rectangle { | |
double x; | |
double y; | |
SDL_Rect rect; | |
}; | |
struct Rectangle* rectangle(double x, double y){ | |
static struct Rectangle r; | |
static SDL_Rect rect; | |
// printf("%0.10f\n", x); | |
r.x = x; | |
r.y = y; | |
rect.w = 100; | |
rect.h = 100; | |
rect.x = r.x; | |
rect.y = r.y; | |
// printf("%i\n\n", rect.x); | |
r.rect = rect; | |
return &r; | |
} | |
SDL_Rect* rectangle_update(struct Rectangle *r, double seconds_elapsed){ | |
// int x = rand() % 400; | |
// int y = rand() % 400; | |
double x = r->x + (500 * seconds_elapsed); | |
double y = r->y; | |
// printf("%0.10f\n\n", x); | |
return &rectangle(x, y)->rect; | |
} | |
double get_time_elapsed(clock_t t_start, clock_t t_now){ | |
double time_diff = (double)(t_now - t_start) / CLOCKS_PER_SEC; | |
return time_diff; | |
} | |
void body(SDL_Renderer *renderer){ | |
SDL_Event event; | |
SDL_Texture *texture; | |
struct Rectangle *rect1; | |
// SDL_Rect *rect1; | |
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500); | |
rect1 = rectangle(0, 0); | |
clock_t time; | |
clock_t time_now; | |
time = clock(); | |
while (1) { | |
time_now = clock(); | |
double seconds_elapsed = get_time_elapsed(time, time_now); | |
time = time_now; | |
if (input_quit(&event)){break;} | |
// printf("%f\n", seconds_elapsed); | |
rectangle_update(rect1, seconds_elapsed); | |
draw(renderer, &rect1->rect, texture); | |
} | |
} | |
int main(int argc, char const *argv[]) | |
{ | |
SDL_Window *window; | |
SDL_Renderer *renderer; | |
// SDL_GLContext glcontext = SDL_GL_CreateContext(window); | |
SDL_Init(SDL_INIT_VIDEO); | |
window = create_window(); | |
renderer = create_renderer(window); | |
body(renderer); | |
// SDL_GL_DeleteContext(glcontext); | |
destroy_and_quit(window, renderer); | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment