152 lines
4 KiB
C++
152 lines
4 KiB
C++
|
#include <GLES3/gl3.h>
|
||
|
#include <GL/glew.h>
|
||
|
|
||
|
#include "./classes/renderer.cpp"
|
||
|
#include "defs.h"
|
||
|
|
||
|
#include <GL/gl.h>
|
||
|
#include <iostream>
|
||
|
#include <string>
|
||
|
#include <GLFW/glfw3.h>
|
||
|
#include <GL/glut.h>
|
||
|
|
||
|
double windowWidth = VARS::WINDOW_WIDTH;
|
||
|
double windowHeight = VARS::WINDOW_HEIGHT;
|
||
|
|
||
|
class pressedKey {
|
||
|
public:
|
||
|
int action;
|
||
|
int key;
|
||
|
int scancode;
|
||
|
int mods;
|
||
|
bool x = false;
|
||
|
};
|
||
|
|
||
|
pressedKey lastPressedKey;
|
||
|
|
||
|
bool textTestEnabled = true;
|
||
|
|
||
|
void handleResize(GLFWwindow *window, int width, int height) {
|
||
|
glViewport(0, 0, width, height);
|
||
|
glMatrixMode(GL_PROJECTION);
|
||
|
glLoadIdentity();
|
||
|
windowWidth = width;
|
||
|
windowHeight = height;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void cursorTrack(GLFWwindow *window, double posx, double posy) {
|
||
|
std::cout << "Cursor at: " << posx << " " << posy << std::endl;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void keyTrack(GLFWwindow *window, int key, int scancode, int action, int mods) {
|
||
|
pressedKey pk;
|
||
|
pk.action = action;
|
||
|
pk.key = key;
|
||
|
pk.scancode = scancode;
|
||
|
pk.mods = mods;
|
||
|
lastPressedKey = pk;
|
||
|
lastPressedKey.x = true;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void charTrack(GLFWwindow *window, unsigned int key) {
|
||
|
// std::cout << "Key: " << key << std::endl;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
glfwInit();
|
||
|
|
||
|
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||
|
|
||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||
|
|
||
|
GLFWwindow *window = glfwCreateWindow(VARS::WINDOW_WIDTH, VARS::WINDOW_HEIGHT, VARS::WINDOW_NAME, NULL, NULL);
|
||
|
|
||
|
glfwMakeContextCurrent(window);
|
||
|
|
||
|
GLenum err = glewInit();
|
||
|
if (GLEW_OK != err)
|
||
|
{
|
||
|
/* Problem: glewInit failed, something is seriously wrong. */
|
||
|
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
|
||
|
return EXIT_FAILURE;
|
||
|
}
|
||
|
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
|
||
|
|
||
|
glfwSetWindowSizeCallback(window, handleResize);
|
||
|
|
||
|
glfwSetCursorPosCallback(window, cursorTrack);
|
||
|
glfwSetKeyCallback(window, keyTrack);
|
||
|
glfwSetCharCallback(window, charTrack);
|
||
|
|
||
|
RENDERER renderer; // construct renderer
|
||
|
|
||
|
// Shader handling
|
||
|
unsigned int shaderProgram;
|
||
|
shaderProgram = glCreateProgram();
|
||
|
|
||
|
unsigned int vertexShader = loadShader("./shaders/vertex.glsl");
|
||
|
unsigned int fragmentShader = loadShader("./shaders/fragment.glsl");
|
||
|
|
||
|
glAttachShader(shaderProgram, vertexShader);
|
||
|
glAttachShader(shaderProgram, fragmentShader);
|
||
|
|
||
|
glLinkProgram(shaderProgram);
|
||
|
|
||
|
glUseProgram(shaderProgram);
|
||
|
|
||
|
glDeleteShader(vertexShader);
|
||
|
glDeleteShader(fragmentShader);
|
||
|
|
||
|
std::string text;
|
||
|
|
||
|
while(!glfwWindowShouldClose(window)) {
|
||
|
renderer.render(window);
|
||
|
glfwSwapBuffers(window);
|
||
|
glfwPollEvents();
|
||
|
|
||
|
// ignore this trash code, this will get a rewrite with much better code, this was just a little test
|
||
|
if(lastPressedKey.x && textTestEnabled) {
|
||
|
switch(lastPressedKey.key) {
|
||
|
case GLFW_KEY_ESCAPE:
|
||
|
if(lastPressedKey.action == GLFW_PRESS) {
|
||
|
lastPressedKey.x = false;
|
||
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||
|
exit(EXIT_SUCCESS);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
if(lastPressedKey.action == GLFW_PRESS && lastPressedKey.key == GLFW_KEY_ENTER) {
|
||
|
std::cout << text << std::endl;
|
||
|
lastPressedKey.x = false;
|
||
|
text = "";
|
||
|
break;
|
||
|
} else if (lastPressedKey.action == GLFW_PRESS && lastPressedKey.key == GLFW_KEY_BACKSPACE && !text.empty()) {
|
||
|
text.pop_back();
|
||
|
lastPressedKey.x = false;
|
||
|
break;
|
||
|
}
|
||
|
if(!(lastPressedKey.key >= 32 && lastPressedKey.key <= 126)) break;
|
||
|
if(lastPressedKey.action == GLFW_PRESS) {
|
||
|
if(lastPressedKey.key == 32) {
|
||
|
text.append(" ");
|
||
|
lastPressedKey.x = false;
|
||
|
break;
|
||
|
}
|
||
|
text.append(glfwGetKeyName(lastPressedKey.key, lastPressedKey.scancode));
|
||
|
lastPressedKey.x = false;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
glfwDestroyWindow(window);
|
||
|
glfwTerminate();
|
||
|
return EXIT_SUCCESS;
|
||
|
}
|