#include "gfx.h" //all the global variables first set here SDL_Window *mwindowp; // main window were everything foes SDL_DisplayMode * screenp; SDL_Renderer * renderp; TTF_Font * fontp; SDL_Surface * msurface; bool surface; int maxx; int maxy; int initgfx(int x, int y,const char * title) { //initializing SDL 2 SDL_Init(SDL_INIT_EVERYTHING); //sets global variables for ease of access later //they are 100 by 200 for now because DisplayMode takes long to implement //screen resizes are handled by sdl events //we're not gonna hcange these for now maxx = x; maxy = y; //makes sdl compatible with opengl(for later use) SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); //creates window mwindowp = SDL_CreateWindow(title, 0, 0, maxx, maxy, SDL_WINDOW_OPENGL); //renderer to write to //the int selects which drivers, -1 just selects first applicatble renderp = SDL_CreateRenderer(mwindowp, -1,SDL_RENDERER_ACCELERATED); //load truetype font int err = TTF_Init(); fontp = TTF_OpenFont("Terminus.ttf",18); if (fontp == NULL) { printf("font failed to load\n"); printf("ttf error %s",TTF_GetError()); } return 0; } int surfacerender(int w, int h) { msurface = SDL_CreateRGBSurface(0, w, h, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); } //two draw functions for convenience int drawimg(int x, int y, int w, int h,SDL_Texture * tex) { SDL_Rect r; r.x = x; r.y = y; r.w = w; r.h = h; //null means entire source texture SDL_RenderCopy(renderp, tex, NULL, &r); return 0; } int drawimg(SDL_Rect r, SDL_Texture * tex) { SDL_RenderCopy(renderp, tex, NULL, &r); return 0; } SDL_Texture * loadtexture(const char * file) { SDL_Surface * tsp; SDL_Texture * ttp; tsp = SDL_LoadBMP(file); ttp = SDL_CreateTextureFromSurface(renderp, tsp); SDL_SetTextureBlendMode(ttp, SDL_BLENDMODE_BLEND); SDL_FreeSurface(tsp); return ttp; } int drawimg(int x, int y, int w, int h, const char * file) { SDL_Texture * ttp = loadtexture(file); drawimg(x,y,w,h,ttp); SDL_DestroyTexture(ttp); } int drawrect (int x, int y, int w, int h, const char * color) { std::string str; str = color; SDL_Rect r; r.x = x; r.y = y; r.w = w; r.h = h; if (!str.compare("red")) { SDL_SetRenderDrawColor(renderp,255,0,0,255); } if (!str.compare("blue")) { SDL_SetRenderDrawColor(renderp,0,0,255,255); } if (!str.compare("orange")) { SDL_SetRenderDrawColor(renderp,255,180,20,255); } if (!str.compare("white")) { SDL_SetRenderDrawColor(renderp,255,255,255,255); } if (!str.compare("black")) { SDL_SetRenderDrawColor(renderp,0,0,0,255); } SDL_RenderFillRect(renderp,&r); SDL_SetRenderDrawColor(renderp,0,0,0,255); return 0; } int drawrect (int x, int y, int w, int h,int r, int g, int b, int a) { SDL_Rect rect; rect.x = x; rect.y = y; rect.w = w; rect.h = h; SDL_SetRenderDrawColor(renderp,r,g,b,a); SDL_SetRenderDrawBlendMode(renderp, SDL_BLENDMODE_BLEND); SDL_RenderFillRect(renderp,&rect); SDL_SetRenderDrawColor(renderp,0,0,0,255); return 0; } //draws text int drawtext(int x, int y,const char * text, SDL_Color c) { //surface the font renderer writes to SDL_Surface * sp; //color of text SDL_Color co; co.r = 100; co.g = 100; co.b = 100; co.a = 100; //renders text with global font sp = TTF_RenderText_Solid(fontp, text, c); //texture to actually draw SDL_Texture * tp; tp = SDL_CreateTextureFromSurface(renderp, sp); //the surface has to be freed because it is only used once and the pointer //to it was declared in a funcion SDL_FreeSurface(sp); //finding the width and height of the text int w; int h; SDL_QueryTexture(tp, NULL, NULL, &w, &h); //drawing the texture drawimg(x, y, w, h, tp); SDL_DestroyTexture(tp); } //this is where almost all of the grame code is int updategfx() { //checks the states of the buttons and handles them accordingly //clears renderer buffer SDL_RenderPresent(renderp); return 0; } int cleargfx() { SDL_RenderClear(renderp); } //quits all the libraries and releases some memory int quitgfx() { //release of context SDL_DestroyRenderer(renderp); TTF_Quit(); SDL_Quit(); return 0; }