diff --git a/main.cpp b/main.cpp index e19498c..b233be5 100644 --- a/main.cpp +++ b/main.cpp @@ -1,74 +1,164 @@ +#define SDL_MAIN_HANDLED #include #include #include #include #include #include -#include #include +void draw_line(SDL_Point source, SDL_Point destination, SDL_Renderer * rend) +{ + +} + +void draw_maze(void) +{ + +} + int main( int argc, const char* argv[] ) { - SDL_Window * win; + SDL_Renderer *renderer = NULL; + SDL_Texture *texture = NULL; + SDL_Surface *bitmapSurface = NULL; + SDL_Window *win; SDL_Surface *image; + SDL_Rect srcR, destR; Uint32 rmask, gmask, bmask, amask; - const char name[] = "BLAH"; + const char name[] = "Game"; if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); return 1; } - win = SDL_CreateWindow(name, 0, 0, 500, 300, SDL_WINDOW_RESIZABLE); - if (win == NULL) { + win = SDL_CreateWindow(name, 0, 0, 800, 800, SDL_WINDOW_RESIZABLE); + if (win == NULL) + { // In the case that the window could not be made... printf("Could not create window: %s\n", SDL_GetError()); return 1; } + renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_Rect rectangle; - image = SDL_GetWindowSurface(win); - printf("Pixel Width: %d, Pixel Heigth: %d\n", image->w, image->h); - // image = SDL_ConvertSurfaceFormat(image, SDL_PIXELFORMAT_RGB444, 0); - //Update the surface - Uint32 *pixels = (Uint32 *)image->pixels; - SDL_UpdateWindowSurface( win ); - + rectangle.x = 0; + rectangle.y = 0; + rectangle.w = 50; + rectangle.h = 50; + SDL_RenderFillRect(renderer, &rectangle); + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 800, 800); + srcR.h = 800; + srcR.w = 800; + destR.h = 800; + destR.w = 800; + srcR.x = 0; + srcR.y = 0; + destR.x = 0; + destR.y = 0; bool run = true; - while (run) { + while (run) + { clock_t start_t, end_t; SDL_Event event; - while (SDL_PollEvent(&event)) { + bool redraw = false; + while (SDL_PollEvent(&event)) + { /* handle your event here */ - if(event.type == SDL_MOUSEBUTTONDOWN) + if (event.type == SDL_MOUSEBUTTONDOWN) { - if(event.button.button == SDL_BUTTON_MIDDLE) // scroll up + if (event.button.button == SDL_BUTTON_MIDDLE) // scroll up { run = false; } - else if(event.button.button == SDL_BUTTON_LEFT) // scroll up + else if (event.button.button == SDL_BUTTON_LEFT) // scroll up { - //Update the surface - SDL_LockSurface(image); - for (size_t i = 0; i < (500*300); i++) { - pixels[i] += 0xFF; - } - SDL_UnlockSurface(image); - start_t = clock(); - SDL_UpdateWindowSurface(win); - end_t = clock(); - printf("Time to draw a frame %f \n", ((double)(end_t - start_t)/(double)(CLOCKS_PER_SEC))); + rectangle.x += 50; + rectangle.y += 0; + redraw = true; } } + else if (event.type == SDL_KEYDOWN) + { + if (event.key.keysym.sym == SDLK_UP) + { + rectangle.y -= 50; + } + else if (event.key.keysym.sym == SDLK_DOWN) + { + rectangle.y += 50; + } + else if (event.key.keysym.sym == SDLK_RIGHT) + { + rectangle.x += 50; + } + else if (event.key.keysym.sym == SDLK_LEFT) + { + rectangle.x -= 50; + } + else + { + /* Do nothing. */ + } + redraw = true; + } else if (event.type == SDL_QUIT) { run = false; } - + else if (event.type == SDL_WINDOWEVENT) + { + switch (event.window.event) + { + case SDL_WINDOWEVENT_ENTER: + case SDL_WINDOWEVENT_SHOWN: + case SDL_WINDOWEVENT_MOVED: + case SDL_WINDOWEVENT_EXPOSED: + case SDL_WINDOWEVENT_RESTORED: + redraw = true; + break; + case SDL_WINDOWEVENT_RESIZED: + case SDL_WINDOWEVENT_SIZE_CHANGED: + case SDL_WINDOWEVENT_MAXIMIZED: + redraw = true; + SDL_GetWindowSize(win, &destR.w, &destR.h); + SDL_Texture *texture_temp = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, destR.w, destR.h); + srcR.h = destR.h; + srcR.w = destR.w; + SDL_RenderCopy(renderer, texture_temp, &srcR, &destR); + SDL_DestroyTexture(texture); + texture = texture_temp; + break; + } + } + else + { + /* Do nothing. */ + } + } + if (redraw) + { + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderClear(renderer); + SDL_SetRenderTarget(renderer, texture); + SDL_RenderDrawRect(renderer, &rectangle); + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0x00); + SDL_RenderFillRect(renderer, &rectangle); + SDL_SetRenderTarget(renderer, NULL); + SDL_RenderCopy(renderer, texture, &srcR, &destR); + SDL_RenderPresent(renderer); } /* do some other stuff here -- draw your app, etc. */ } SDL_FreeSurface(image); + SDL_DestroyTexture(texture); + SDL_DestroyRenderer(renderer); SDL_DestroyWindow(win); return 0; } //g++ main.cpp -o blah `sdl2-config --cflags --libs` +/* +g++ main.cpp -IC:\Users\Daniel\Documents\Projects\i686-w64-mingw32\include\SDL2 -LC:\Users\Daniel\Documents\Projects\i686-w64-mingw32\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o SDLMain +*/ \ No newline at end of file