diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fe21ef..ccb978b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.2) project(glTest) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DGLEW_STATIC -O0 -g") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -g") set(CMAKE_BUILD_TYPE DEBUG) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") @@ -11,14 +11,7 @@ if(APPLE) set(OPENGL_LIBRARIES ${OPENGL_FRAMEWORK}) else() find_package(OpenGL REQUIRED) - find_library(x11 NAMES X11) - find_library(xrandr NAMES Xrandr) - find_library(xi NAMES Xi) - find_library(xxf86vm NAMES Xxf86vm) - find_library(pthread NAMES pthread) - find_library(Xinerama NAMES Xinerama) - find_library(Xcursor NAMES Xcursor) - set(OPENGL_LIBRARIES rt asound ${OPENGL_LIBRARIES} ${x11} ${xrandr} ${xi} ${xxf86vm} ${Xinerama} ${Xcursor} ${pthread}) + set(OPENGL_LIBRARIES ${OPENGL_LIBRARIES}) endif() find_package(PkgConfig REQUIRED) diff --git a/src/Camera.cpp b/src/Camera.cpp index 265bfad..7ae40d0 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -12,7 +12,7 @@ Camera *Camera::instance() { return &camera; } -void Camera::storeUniformVars() { +void Camera::storeUniformVars() const { // GLint view = glGetUniformLocation(program, "mView"); // glUniformMatrix4fv(view, 1, GL_FALSE, glm::value_ptr(mView)); // GLint projection = glGetUniformLocation(program, "mProjection"); diff --git a/src/Camera.h b/src/Camera.h index 4b7550d..2117476 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -11,9 +11,9 @@ private: private: Camera(); - Camera(Camera&) = delete; - void operator=(Camera&) = delete; - void storeUniformVars(); + Camera(const Camera&) = delete; + void operator=(const Camera&) = delete; + void storeUniformVars() const; public: static Camera* instance(); diff --git a/src/GLApp.cpp b/src/GLApp.cpp new file mode 100644 index 0000000..e21fdb1 --- /dev/null +++ b/src/GLApp.cpp @@ -0,0 +1,58 @@ +#include "GLApp.h" +#include + +#include + +bool wired = false; +void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) +{ + if (key == GLFW_KEY_M && action == GLFW_PRESS) { + glPolygonMode(GL_FRONT_AND_BACK, wired ? GL_FILL : GL_LINE); + wired = !wired; + } +} + +GLApp::GLApp() { + +} + +GLApp *GLApp::instance() { + static GLApp app; + return &app; +} + +void GLApp::updateFpsCounter() const { + static double previous_seconds = glfwGetTime (); + static int frame_count; + double current_seconds = glfwGetTime (); + double elapsed_seconds = current_seconds - previous_seconds; + if (elapsed_seconds > 0.25) { + previous_seconds = current_seconds; + double fps = (double)frame_count / elapsed_seconds; + char tmp[128]; + sprintf (tmp, "opengl @ fps: %.2f", fps); + glfwSetWindowTitle (_window, tmp); + frame_count = 0; + } + frame_count++; +} + +void GLApp::init() { + glfwInit(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); + glfwWindowHint (GLFW_SAMPLES, 4); + + _window = glfwCreateWindow(1024, 1024, "OpenGL", nullptr, nullptr); // Windowed + glfwMakeContextCurrent(_window); + glfwSetKeyCallback(_window, key_callback); + + glewExperimental = GL_TRUE; + GLenum err = glewInit(); + if(err != GLEW_OK) { + std::cout << "GLEW error: " << err << ": " << glewGetErrorString(err) << std::endl; + } +} diff --git a/src/GLApp.h b/src/GLApp.h new file mode 100644 index 0000000..bbc44c6 --- /dev/null +++ b/src/GLApp.h @@ -0,0 +1,22 @@ +#ifndef GLTEST_GLAPP_H +#define GLTEST_GLAPP_H + +#include + +class GLApp { +private: + GLFWwindow* _window; + +private: + GLApp(); + GLApp(const GLApp&) = delete; + void operator=(const GLApp&) = delete; + void updateFpsCounter() const; + +public: + static GLApp* instance(); + void init(); +}; + + +#endif //GLTEST_GLAPP_H diff --git a/src/main.cpp b/src/main.cpp index d8c2b5b..bf92764 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ glm::vec3 eye(0.0f, 0.0f, 4.0f), at(0.0f, 0.0f, 0.0f), up(0.0f, 1.0f, 0.0f); glm::mat4 mView = glm::lookAt(eye, at, up); -glm::mat4 mProjection = glm::perspective(45.0f, 1.0f, 2.0f, -2.0f); +glm::mat4 mProjection = glm::perspective(45.0f, 1.0f, -2.0f, 2.0f); //glm::perspective(45.0f, 1.0f, 2.0f, -2.0f); bool wired = false; void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) @@ -77,7 +77,7 @@ int main() { glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); - AudioPlayer player("/Users/selim/Dropbox/euphoria.wav"); + AudioPlayer player("/home/selim/dl/euphoria.wav"); player.setStreamListener([&mesh](void* data, std::size_t framesCount){ mesh.addLine((float*)data); });