Skip to content

Instantly share code, notes, and snippets.

@spaceexperiment
Last active September 24, 2016 16:50
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 spaceexperiment/d2b465ab071e821c84c925b7f20f3279 to your computer and use it in GitHub Desktop.
Save spaceexperiment/d2b465ab071e821c84c925b7f20f3279 to your computer and use it in GitHub Desktop.
#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