#include #include #include #include #include "display.h" #include "typedef.h" unsigned char WIDTH = 1; unsigned char HEIGHT = 1; GLubyte pixels[BUF_CAP] = {0}; static int fd; void pixel(int x, int y, char *buf) { int p = (y*WIDTH + x)*3; int b = ((HEIGHT-1-y)*WIDTH+x)*3; pixels[p+0] = buf[b+0]; pixels[p+1] = buf[b+1]; pixels[p+2] = buf[b+2]; } void render() { read(fd, &WIDTH, sizeof(WIDTH)); read(fd, &HEIGHT, sizeof(HEIGHT)); char buf[BUF_CAP] = {0}; if(read(fd, buf, sizeof(buf)) != -1) for(int i = 0; i < HEIGHT; i++) for(int j = 0; j < WIDTH; j++) pixel(j, i, buf); glClear(GL_COLOR_BUFFER_BIT); glDrawPixels(WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, pixels); glutSwapBuffers(); glutReshapeWindow(WIDTH, HEIGHT); glutPostRedisplay(); } void display(int *argc, char **argv, int readfd) { glutInit(argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(69, 69); glutCreateWindow(argv[0]); fd = readfd; glutDisplayFunc(render); glutMainLoop(); puts("DISPLAY EXIT"); }