diff options
author | epoch <epoch@hacking.allowed.org> | 2017-03-19 04:51:01 -0500 |
---|---|---|
committer | epoch <epoch@hacking.allowed.org> | 2017-03-19 04:51:01 -0500 |
commit | 781ecd6529505e4bf1fd400634ee83bcb9a07c81 (patch) | |
tree | a5f51756d54dff5ebb47f5435198e1db15ce345d /src/graphics_c2_opengl.c | |
parent | 17347b2e23292aad11c879d3df4a0e73c31e2ae8 (diff) | |
download | hackvr-781ecd6529505e4bf1fd400634ee83bcb9a07c81.tar.gz hackvr-781ecd6529505e4bf1fd400634ee83bcb9a07c81.zip |
I have no idea why I am doing this...
Diffstat (limited to 'src/graphics_c2_opengl.c')
-rw-r--r-- | src/graphics_c2_opengl.c | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/src/graphics_c2_opengl.c b/src/graphics_c2_opengl.c new file mode 100644 index 0000000..3429193 --- /dev/null +++ b/src/graphics_c2_opengl.c @@ -0,0 +1,193 @@ +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <GL/glut.h> +#include <GL/freeglut_ext.h> + +#include "common.h" +#include "graphics_cs.h" +#include "graphics_c2.h" +#include "graphics_c3.h" + +extern struct gra_global gra_global; + +GLenum doubleBuffer; +GLubyte ubImage[65536]; + +#define RIGHT 320.0 +#define LEFT -320.0 +#define TOP 240.0 +#define BOTTOM -240.0 + +int c2sX(real x) { return (gra_global.width/(gra_global.split_screen / (gra_global.red_and_blue ? gra_global.split_screen: 1))) * ((x + RIGHT) / (RIGHT *2)) + gra_global.xoff; } +int s2cX(real x) { return (x/(gra_global.width/(gra_global.split_screen / (gra_global.red_and_blue?gra_global.split_screen :1))))*(RIGHT*2)-RIGHT; } + +int c2sY(real y) { return gra_global.height * ((TOP-y) / (TOP*2)); } +int s2cY(real y) { return -((y/gra_global.height) * (TOP*2) - TOP); } + +cs_t c2_to_cs(c2_t p) { + return (cs_t){c2sX(p.x),c2sY(p.y)}; +} + +c2_t cs_to_c2(cs_t p) { + return (c2_t){s2cX(p.x),s2cY(p.y)}; +} + +void set_aspect_ratio(int w,int h) { + glViewport(0,0,w,h); +// glMatrixMode(GL_PROJECTION); +// glLoadIdentity(); +// glOrtho(LEFT,RIGHT,BOTTOM,TOP,0,0); +// glTranslatef(0,-h,0); +} + +void set_color_based_on_distance(real d) { + //scale this color based on distance... closer is lighter. +// float g; +// g=d/100.0 + glColor3f(0.0, 1.0, 0.0); +} + +void set_clipping_rectangle(int x,int y,int w,int h) { + +} + +void draw_c2_line(c2_t p1,c2_t p2) { + //glBegin(GL_TRIANGLES); + glBegin(GL_LINES); + glColor3f(0.0, 1.0, 0.0); + glVertex2i(p1.x,p1.y); + glVertex2i(p2.x,p2.y); + //glVertex2i(p2.x,p2.y); + glEnd(); +} + +void draw_c2_text(c2_t p,char *s) { +// printf("@%lF,%lF: %s\n",p.x,p.y,s); +} + +void draw_c2_shape(c2_s_t s) { + int i; +// printf("drawing shaep!\n"); + for(i=0;i<s.len+(s.len==1);i++) {//this shape is closed! + draw_c2_line(s.p[i],s.p[(i+1)%(s.len+(s.len==1))]); + } +/* glBegin(GL_LINE_STRIP); + glColor3f(0.0, 1.0, 0.0); + for(i=0;i<s.len+(s.len==1);i++) { + glVertex2i(s.p[i].x,s.p[i].y); + } + glEnd(); +*/ +} + +void draw_c2_filled_shape(c2_s_t s) { + draw_c2_shape(s); +// glBegin(GL_POLYGON); +// glVertex2s(); +// glEnd(); +} + +void set_color() { + glColor3f(0.0, 1.0, 0.0); +} + +void set_color_red() { + glColor3f(1.0, 0.0, 0.0); +} + +void set_color_blue() { + glColor3f(0.0, 0.0, 1.0); +} + +void clear_backbuffer() { + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); +// glFlush(); +} + +void flipscreen() { +// glutSwapBuffers(); + glFlush(); +} + +void red_and_blue_magic() { + +} + +void keypress_handler(unsigned char key, int x, int y) {//x and y are mouse positions. + switch (key) { + case 27: + exit(0); + } +} + +/* draw_screen is in graphics.c +void draw_screen(void) +{ + + +}*/ + + +void derp_screen() { + printf("derpsceen being called.\n"); + clear_backbuffer(); + set_color(); + + //this should work for draw_c2_line, not cs_line... merp. +// draw_c2_line((c2_t){LEFT,0},(c2_t){RIGHT,0}); //horizon +// draw_cs_line((cs_t){0,0},(cs_t){1,1}); +// draw_cs_line((cs_t){-1,0},(cs_t){0,1}); +// draw_cs_line((cs_t){0,0},(cs_t){-1,1}); + /*draw_cs_line((cs_t){10,10},(cs_t){200,210}); + draw_cs_line((cs_t){50,10},(cs_t){200,210}); + draw_cs_line((cs_t){0,60},(cs_t){200,210});*/ + flipscreen(); +} + +void empty() { +} + +int graphics_sub_init(void) +{ +// GLenum type; + +// type = GLUT_RGB; +// type |= GLUT_DOUBLE; + int argc=0; + char *argv[]={"derp",0}; + glutInit(&argc,argv); +// glutInitDisplayMode(type); + glutCreateWindow("hackvr opengl and glut testing"); + glutInitWindowSize(320,240); + glScalef((1.0/320.0),(1.0/240.0),-1);//only do this once! +// glMatrixMode(GL_PROJECTION); +// glLoadIdentity(); +// gluPerspective(60.0, 1.0, 0.1, 1000.0); +// glMatrixMode(GL_MODELVIEW); +// glDisable(GL_DITHER); + + printf("test"); + + glutKeyboardFunc(keypress_handler); + glutDisplayFunc(draw_screen);//this is probably what should happen... + glutReshapeFunc(set_aspect_ratio); + return 0;//we're fine +} + + +int graphics_event_handler() {//return values: -1 exit, 0 don't redraw, anything else redraw + glutMainLoopEvent(); + glutPostRedisplay();//heh. wonder if this works... + return 1; +} + +/* +void main(int argc,char *argv[]) { + graphics_init(); + while(1) { + graphics_event_handler(); + } +} +*/ |