summaryrefslogtreecommitdiff
path: root/gfx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx.cpp')
-rw-r--r--gfx.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/gfx.cpp b/gfx.cpp
new file mode 100644
index 0000000..ca597d5
--- /dev/null
+++ b/gfx.cpp
@@ -0,0 +1,152 @@
+#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;
+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;
+}
+//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_ADD);
+ 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_ADD);
+ 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;
+}