From 44950c143288e2cdc55ab15e45103fa822577be6 Mon Sep 17 00:00:00 2001 From: SoloArchx250 Date: Thu, 28 May 2020 15:29:44 -0400 Subject: [PATCH] switched to sdl instead of gl/sdl --- src/main.cpp | 312 +++++++++++++++++++++++++++++---------------------- 1 file changed, 176 insertions(+), 136 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 36cd6d7..831fc98 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,160 +1,200 @@ #include #include #include -#include -#include -#include +#include #include "Quad.h" -SDL_Window *gWindow = NULL; +SDL_Window *win = NULL; +SDL_Renderer *rend = NULL; SDL_GLContext gContext; -bool gRenderQuad = true; -int width=500,height=500; +Color cc; -bool init() { - bool success = true; - if(SDL_Init(SDL_INIT_VIDEO) != 0) { - fprintf(stderr, "[ERROR] Could not initialize SDL video\n%s\n", SDL_GetError()); - success = false; +int init() { + if(SDL_Init(SDL_INIT_EVERYTHING) != 0) { + fprintf(stderr,"\033[92m[ ERROR ] Could not initialize SDL:\n%s\n", SDL_GetError()); + return 0; + } + win = SDL_CreateWindow("Simple Rigid Sim", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + 500, + 500, + 0 + ); + rend = SDL_CreateRenderer(win, + -1, + SDL_RENDERER_ACCELERATED + ); + if(rend == NULL) { + return 0; } else { - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); - gWindow = SDL_CreateWindow("Hydro Simulator", - SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, - width, - height, - SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN - ); - if(gWindow == NULL) { - - fprintf(stderr, "[ERROR] Could not create an SDL window\n%s\n", SDL_GetError()); - success = false; - - } else { - gContext = SDL_GL_CreateContext(gWindow); - if(gContext == NULL) { - fprintf(stderr, "[ERROR]Could not create an SDL OpenGL context\n%s\n", SDL_GetError()); - success = false; - } else { - if(SDL_GL_SetSwapInterval(1) < 0) { - fprintf(stderr, "[ERROR] Could not set SDL vsync\n%s\n", SDL_GetError()); - success = false; - } - } - } - } - return success; + return 1; + } } -bool initGL() { - bool success = true; - GLenum error = GL_NO_ERROR; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - error = glGetError(); - if(error != GL_NO_ERROR) { - fprintf(stderr, - "[ERROR] Could not initialize OpenGL matrix projection\n%s\n", - gluErrorString(error) - ); - success = false; - } - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - error = glGetError(); - if(error != GL_NO_ERROR) { - fprintf(stderr, - "[ERROR] Could not initialize OpenGL matrix modelview\n%s\n", - gluErrorString(error) - ); - success = false; - } - glClearColor(0,0,0,255); - error = glGetError(); - if(error != GL_NO_ERROR) { - fprintf(stderr, - "[ERROR] Could not initialize the OpenGL clear color\n%s\n", - gluErrorString(error) - ); - success = false; - } - return success; +uint8_t rt,gt,bt,at; + +void clear(SDL_Renderer *renderer) { + SDL_GetRenderDrawColor(renderer,&rt,>,&bt,&at); + SDL_SetRenderDrawColor(renderer,cc.r,cc.g,cc.b,cc.a); + SDL_RenderClear(renderer); + SDL_SetRenderDrawColor(renderer,rt,gt,bt,at); } -void handleKeys(unsigned char key, int x, int y) { - if(key == 'q') { - gRenderQuad = !gRenderQuad; +bool clamp(float *value, float val) { + if(value[0] > val) { + value[0] = 0.0; + return false; } else { - if(key==SDL_SCANCODE_ESCAPE) { - gRenderQuad = false; - } - } -} - -void update() { -} - -float a = 0.5f; -Vertex btl(-0.5f,0.5f,-0.5f); -Vertex btr(0.5f,0.5f,-0.5f); -Vertex bbr(0.5f,-0.5f,-0.5f); -Vertex bbl(-0.5f,-0.5f,-0.5f); - -Vertex ftl(-0.5f,0.5f,0.5f); -Vertex ftr(0.5f,0.5f,0.5f); -Vertex fbr(0.5f,-0.5f,0.5f); -Vertex fbl(-0.5f,-0.5f,0.5f); - -Quad left(btl,ftl,bbl,fbl); -Quad top(btl,btr,ftl,ftr); -Quad right(ftr,btr,fbr,bbr); -Quad bottom(fbl,fbr,bbl,bbr); -Quad front(ftl,ftr,fbr,fbl); - -float scale = -1.0f; -void render() { - glClear(GL_COLOR_BUFFER_BIT); - if(gRenderQuad) { - glLoadIdentity(); - //glTranslatef(0.0f,0.0f,0.0f); - //scale+=0.01f; - glBegin(GL_QUADS); - left.setColor(myColor(RED_f4)); - left.render(); - top.setColor(myColor(GREEN_f4)); - top.render(); - right.setColor(myColor(BLUE_f4)); - right.render(); - bottom.setColor(myColor(PURPLE_f4)); - bottom.render(); - glEnd(); + return true; } } int main() { init(); - initGL(); - SDL_StartTextInput(); - bool quit = false; - SDL_Event e; - printf("Succesfully initialized\n"); - while(!quit) { - while(SDL_PollEvent(&e) != 0) { - if(e.type == SDL_QUIT) { - quit = true; - } else { - if(e.type == SDL_TEXTINPUT) { - int x=0,y=0; - SDL_GetMouseState(&x,&y); - handleKeys(e.text.text[0], x, y); - } + cc = Color(BLACK); + + bool run = true; + int w,h; + //int mouseX,mouseY; + + SDL_GetWindowSize(win,&w,&h); + + Vector vec = Vector(0,0); + + Quad quad = Quad(vec,20,20); + quad.setColor(Color(RED)); + + Vector buffer = Vector(0.0,0.0); + bool change_vector[2] = {false,false}; + + float step = 5.0; + //float clamp_min = 0.5; + + bool trackmouse = false,modified=false; + + int x1,y1,x2,y2; + + Quad rect; + + Quad *grav_objs = (Quad *)malloc(0); + std::vector objs; + + while(run) { + if(modified) { + clear(rend); + } + SDL_Event event; + while(SDL_PollEvent(&event)) { + modified = true; + switch (event.type) { + case SDL_QUIT: + run = false; + break; + case SDL_MOUSEBUTTONDOWN: + trackmouse = true; + x1 = event.motion.x; + y1 = event.motion.y; + x2 = event.motion.x; + y2 = event.motion.y; + printf("Click at %i,%i\n",x1,y1); + break; + case SDL_MOUSEBUTTONUP: + printf("Mouse released at %i,%i\n",x2,y2); + trackmouse = false; + objs.push_back(rect); + //grav_objs = (Quad *)calloc(1,sizeof(Quad)); + //grav_objs[sizeof(grav_objs)/sizeof(grav_objs[0])] = rect; + //printf("grav objs: %lu\n",(sizeof(grav_objs)/sizeof(grav_objs[0]))); + break; + case SDL_MOUSEMOTION: + if(trackmouse) { + x2 = event.motion.x; + y2 = event.motion.y; + } + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case SDLK_w: + buffer.y=-step; + change_vector[1] = false; + break; + case SDLK_a: + buffer.x=-step; + change_vector[0] = false; + break; + case SDLK_s: + buffer.y=step; + change_vector[1] = false; + break; + case SDLK_d: + buffer.x=step; + change_vector[0] = false; + break; + } + case SDL_KEYUP: + switch (event.key.state) { + case SDL_RELEASED: + switch(event.key.keysym.sym) { + case SDLK_w: + buffer.y=0; + change_vector[1] = true; + break; + case SDLK_a: + buffer.x=0; + change_vector[0] = true; + break; + case SDLK_s: + buffer.y=0; + change_vector[1] = true; + break; + case SDLK_d: + buffer.x=0; + change_vector[0] = true; + break; + } + break; + } + break; + break; } } - render(); - SDL_GL_SwapWindow(gWindow); + //change_vector[0] = clamp(&buffer.x,clamp_min); + //change_vector[1] = clamp(&buffer.y,clamp_min); + if(trackmouse) { + rect = Quad(Vector(x1,y1),Vector(x2,y2)); + rect.setColor(Color(GREEN)); + rect.render(rend); + } + /*for(int i=0; i