mirror of
https://github.com/PoetryInCode/simple-rigid-sim.git
synced 2025-06-09 11:03:08 -04:00
switched to sdl instead of gl/sdl
This commit is contained in:
parent
8614feaa44
commit
44950c1432
312
src/main.cpp
312
src/main.cpp
@ -1,160 +1,200 @@
|
||||
#include <iostream>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_timer.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glu.h>
|
||||
#include <SDL2/SDL_opengl.h>
|
||||
#include <vector>
|
||||
#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<Quad> 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<sizeof(grav_objs)/sizeof(grav_objs[0]); i++) {
|
||||
grav_objs[i].setColor(Color(WHITE));
|
||||
grav_objs[i].render(rend);
|
||||
}*/
|
||||
for(int i=0; i<objs.size(); i++) {
|
||||
objs[i].render(rend);
|
||||
}
|
||||
if(change_vector[0]) {
|
||||
if(buffer.x != 0.0) {
|
||||
buffer.x = buffer.x/1.05;
|
||||
printf("%f",buffer.x);
|
||||
} else {
|
||||
buffer.x = 0;
|
||||
}
|
||||
}
|
||||
if(change_vector[1]) {
|
||||
if(buffer.y != 0.0) {
|
||||
buffer.y = buffer.y/1.05;
|
||||
printf("%f",buffer.x);
|
||||
} else {
|
||||
buffer.y = 0;
|
||||
}
|
||||
}
|
||||
quad.translate(buffer);
|
||||
quad.render(rend);
|
||||
SDL_RenderPresent(rend);
|
||||
SDL_GetWindowSize(win,&w,&h);
|
||||
SDL_Delay(1000/60);
|
||||
}
|
||||
SDL_StopTextInput();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user