mirror of
https://github.com/vgough/encfs.git
synced 2025-01-18 03:49:45 +01:00
5f0806c5cc
git-vendor-name: easylogging git-vendor-dir: vendor/github.com/muflihun/easyloggingpp git-vendor-repository: https://github.com/muflihun/easyloggingpp git-vendor-ref: master
194 lines
5.6 KiB
C++
194 lines
5.6 KiB
C++
|
|
#include <iostream>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef __APPLE__
|
|
# include <OpenGL/OpenGL.h>
|
|
# include <GLUT/glut.h>
|
|
#else
|
|
# include <GL/glut.h>
|
|
#endif
|
|
#include "../easylogging++.h"
|
|
|
|
#include "imageloader.h"
|
|
|
|
INITIALIZE_EASYLOGGINGPP
|
|
|
|
using namespace std;
|
|
|
|
const float BOX_SIZE = 7.0f; //The length of each side of the cube
|
|
float _angle = 0; //The rotation of the box
|
|
GLuint _textureId; //The OpenGL id of the texture
|
|
|
|
void handleKeypress(unsigned char key, int x, int y) {
|
|
switch (key) {
|
|
case 27: //Escape key
|
|
exit(0);
|
|
}
|
|
}
|
|
|
|
//Makes the image into a texture, and returns the id of the texture
|
|
GLuint loadTexture(Image* image) {
|
|
VLOG(1) << "Loading texture from image...";
|
|
GLuint textureId;
|
|
glGenTextures(1, &textureId);
|
|
glBindTexture(GL_TEXTURE_2D, textureId);
|
|
glTexImage2D(GL_TEXTURE_2D,
|
|
0,
|
|
GL_RGB,
|
|
image->width, image->height,
|
|
0,
|
|
GL_RGB,
|
|
GL_UNSIGNED_BYTE,
|
|
image->pixels);
|
|
return textureId;
|
|
}
|
|
|
|
void initRendering() {
|
|
VLOG(1) << "Initializing rendering";
|
|
glEnable(GL_DEPTH_TEST);
|
|
glEnable(GL_LIGHTING);
|
|
glEnable(GL_LIGHT0);
|
|
glEnable(GL_NORMALIZE);
|
|
glEnable(GL_COLOR_MATERIAL);
|
|
|
|
Image* image = loadBMP("vtr.bmp");
|
|
_textureId = loadTexture(image);
|
|
delete image;
|
|
}
|
|
|
|
void handleResize(int w, int h) {
|
|
VLOG(1) << "Resizing to [" << w << " x " << h << "]";
|
|
glViewport(0, 0, w, h);
|
|
glMatrixMode(GL_PROJECTION);
|
|
glLoadIdentity();
|
|
gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
|
|
}
|
|
|
|
void drawScene() {
|
|
VLOG(3) << "Drawing scene...";
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
glMatrixMode(GL_MODELVIEW);
|
|
glLoadIdentity();
|
|
|
|
glTranslatef(0.0f, 0.0f, -20.0f);
|
|
|
|
GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
|
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
|
|
|
|
GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
|
|
GLfloat lightPos[] = {-2 * BOX_SIZE, BOX_SIZE, 4 * BOX_SIZE, 1.0f};
|
|
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
|
|
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
|
|
|
|
glRotatef(-_angle, 1.0f, 1.0f, 0.0f);
|
|
|
|
glBegin(GL_QUADS);
|
|
|
|
//Top face
|
|
glColor3f(1.0f, 1.0f, 0.0f);
|
|
glNormal3f(0.0, 1.0f, 0.0f);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
|
|
//Bottom face
|
|
glColor3f(1.0f, 0.0f, 1.0f);
|
|
glNormal3f(0.0, -1.0f, 0.0f);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
|
|
//Left face
|
|
glNormal3f(-1.0, 0.0f, 0.0f);
|
|
glColor3f(0.0f, 1.0f, 1.0f);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glColor3f(0.0f, 0.0f, 1.0f);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
|
|
//Right face
|
|
glNormal3f(1.0, 0.0f, 0.0f);
|
|
glColor3f(1.0f, 0.0f, 0.0f);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glColor3f(0.0f, 1.0f, 0.0f);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
|
|
glEnd();
|
|
|
|
glEnable(GL_TEXTURE_2D);
|
|
glBindTexture(GL_TEXTURE_2D, _textureId);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
glColor3f(1.0f, 1.0f, 1.0f);
|
|
glBegin(GL_QUADS);
|
|
|
|
//Front face
|
|
glNormal3f(0.0, 0.0f, 1.0f);
|
|
glTexCoord2f(0.0f, 0.0f);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glTexCoord2f(1.0f, 0.0f);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glTexCoord2f(1.0f, 1.0f);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
glTexCoord2f(0.0f, 1.0f);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
|
|
|
|
//Back face
|
|
glNormal3f(0.0, 0.0f, -1.0f);
|
|
glTexCoord2f(0.0f, 0.0f);
|
|
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glTexCoord2f(1.0f, 0.0f);
|
|
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glTexCoord2f(1.0f, 1.0f);
|
|
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
glTexCoord2f(0.0f, 1.0f);
|
|
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
|
|
|
|
glEnd();
|
|
glDisable(GL_TEXTURE_2D);
|
|
|
|
glutSwapBuffers();
|
|
}
|
|
|
|
//Called every 25 milliseconds
|
|
void update(int value) {
|
|
_angle += 1.0f;
|
|
if (_angle > 360) {
|
|
_angle -= 360;
|
|
}
|
|
VLOG(3) << "Updating ... [angle: " << _angle << "]";
|
|
glutPostRedisplay();
|
|
glutTimerFunc(25, update, 0);
|
|
}
|
|
|
|
int main(int argc, char** argv) {
|
|
|
|
START_EASYLOGGINGPP(argc, argv);
|
|
|
|
LOG(INFO) << "Source base taken from http://www.muflihun.com";
|
|
|
|
LOG_IF(!VLOG_IS_ON(1), INFO) << "Try using --v=1 or --v=2 or --verbose command line arguments as well";
|
|
|
|
glutInit(&argc, argv);
|
|
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
|
|
glutInitWindowSize(400, 400);
|
|
|
|
glutCreateWindow("Great Cube Sample");
|
|
initRendering();
|
|
|
|
glutDisplayFunc(drawScene);
|
|
glutKeyboardFunc(handleKeypress);
|
|
glutReshapeFunc(handleResize);
|
|
glutTimerFunc(25, update, 0);
|
|
|
|
glutMainLoop();
|
|
return 0;
|
|
}
|