added the other files
This commit is contained in:
		
							parent
							
								
									deff78ed58
								
							
						
					
					
						commit
						11d4aac4ce
					
				
							
								
								
									
										18
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.5) | ||||||
|  | project(CoursOpenGl) | ||||||
|  | 
 | ||||||
|  | file(GLOB_RECURSE SRC src/*) | ||||||
|  | file(GLOB_RECURSE HEADERS include/*) | ||||||
|  | 
 | ||||||
|  | find_package(GLEW REQUIRED) | ||||||
|  | include_directories(${GLEW_INCLUDE_DIRS}) | ||||||
|  | add_executable(CoursOpenGl ${LIB_HEADERS} ${HEADERS} ${SRC}) | ||||||
|  | 
 | ||||||
|  | find_package(OpenGL REQUIRED) | ||||||
|  | find_package(glfw3 3.4 REQUIRED) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | target_include_directories(CoursOpenGl PUBLIC ${CMAKE_SOURCE_DIR}/include) | ||||||
|  | target_link_libraries(CoursOpenGl glfw OpenGL::GL -lGLU ${GLEW_LIBRARIES}) | ||||||
|  | target_link_directories(CoursOpenGl PUBLIC .) | ||||||
|  | 
 | ||||||
							
								
								
									
										11
									
								
								assets/shaders/fragment.glsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								assets/shaders/fragment.glsl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | #version 330 core | ||||||
|  | out vec4 FragColor; | ||||||
|  | in vec2 TexCoord; | ||||||
|  | 
 | ||||||
|  | uniform sampler2D ourTexture; | ||||||
|  | 
 | ||||||
|  | void main() | ||||||
|  | { | ||||||
|  |     //FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f); | ||||||
|  |     FragColor = texture(ourTexture, TexCoord); | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								assets/shaders/vertex.glsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								assets/shaders/vertex.glsl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | #version 330 core | ||||||
|  | layout (location = 0) in vec3 aPos; | ||||||
|  | layout (location = 1) in vec2 aTexCoord; | ||||||
|  | out vec2 TexCoord; | ||||||
|  | uniform mat4 model; | ||||||
|  | uniform mat4 view; | ||||||
|  | uniform mat4 projection; | ||||||
|  | 
 | ||||||
|  | void main() | ||||||
|  | { | ||||||
|  |     gl_Position = projection * view * model * vec4(aPos, 1.0); | ||||||
|  |     TexCoord = aTexCoord; | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/textures/prof.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/prof.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 353 KiB | 
							
								
								
									
										35
									
								
								include/ShaderProgram.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								include/ShaderProgram.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | #ifndef SHADERPROGRAM_H | ||||||
|  | #define SHADERPROGRAM_H | ||||||
|  | 
 | ||||||
|  | #include <GL/glew.h> | ||||||
|  | #include <GLFW/glfw3.h> | ||||||
|  | #include <string> | ||||||
|  | #include <glm/glm.hpp> | ||||||
|  | 
 | ||||||
|  | namespace djalim { | ||||||
|  |     class ShaderProgram { | ||||||
|  |         public: | ||||||
|  |         ShaderProgram(); | ||||||
|  |         ~ShaderProgram(); | ||||||
|  | 
 | ||||||
|  |         bool loadShaders(const char* vertexShaderFile, const char* fragmentShaderFile); | ||||||
|  |         void use(); | ||||||
|  | 
 | ||||||
|  |         void setUniform(const std::string& name, float value); | ||||||
|  |         void setUniform(const std::string& name, int value); | ||||||
|  |         void setUniform(const std::string& name, const glm::vec2& value); | ||||||
|  |         void setUniform(const std::string& name, const glm::vec3& value); | ||||||
|  |         void setUniform(const std::string& name, const glm::vec4& value); | ||||||
|  |         void setUniform(const std::string& name, const glm::mat4& value); | ||||||
|  | 
 | ||||||
|  |         GLuint getProgram() const { return mHandle; } | ||||||
|  | 
 | ||||||
|  |         private: | ||||||
|  |         std::string fileToString(const std::string& filename); | ||||||
|  |         void checkCompileErrors(GLuint shader, std::string type); | ||||||
|  | 
 | ||||||
|  |         GLuint mHandle; | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif // SHADERPROGRAM_H
 | ||||||
							
								
								
									
										20
									
								
								include/Texture2D.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								include/Texture2D.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | #ifndef TEXTURE2D_H | ||||||
|  | #define TEXTURE2D_H | ||||||
|  | #include <stb_image/stb_image.h> | ||||||
|  | 
 | ||||||
|  | #include <GL/glew.h> | ||||||
|  | #include <string> | ||||||
|  | 
 | ||||||
|  | class Texture2D { | ||||||
|  | public: | ||||||
|  |     Texture2D(); | ||||||
|  |     ~Texture2D(); | ||||||
|  | 
 | ||||||
|  |     bool loadTexture(const std::string& filename, bool generateMipmaps = true); | ||||||
|  |     void bind(GLuint texUnit = 0); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     GLuint mTexture; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif // TEXTURE2D_H
 | ||||||
							
								
								
									
										60
									
								
								include/engine.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								include/engine.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | #ifndef ENGINE_H | ||||||
|  | #define ENGINE_H | ||||||
|  | 
 | ||||||
|  | #include <GL/glew.h> | ||||||
|  | #include <GLFW/glfw3.h> | ||||||
|  | #include "ShaderProgram.h" | ||||||
|  | #include "Texture2D.h" | ||||||
|  | #include <map> | ||||||
|  | #include <string> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | #define NBCALLBACKS 1 | ||||||
|  | 
 | ||||||
|  | typedef void (*KeyCallback)(GLFWwindow* window, int key, int scancode, int action, int mods); | ||||||
|  | 
 | ||||||
|  | struct Object3D { | ||||||
|  |   Texture2D texture; | ||||||
|  |   GLuint VBO; | ||||||
|  |   GLuint VAO; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | typedef std::map<std::string,Object3D> Objects3D; | ||||||
|  | 
 | ||||||
|  | static bool gWireframe = false; | ||||||
|  | 
 | ||||||
|  | namespace djalim { | ||||||
|  | 
 | ||||||
|  |   class OpenGlEngine{ | ||||||
|  | 
 | ||||||
|  |     public: | ||||||
|  | 
 | ||||||
|  |       void start(); | ||||||
|  |       OpenGlEngine( const char* title, int width, int height); | ||||||
|  |       ~OpenGlEngine(); | ||||||
|  | 
 | ||||||
|  |       GLFWwindow* window; | ||||||
|  |       double previousSeconds = 0.0; | ||||||
|  |       double elapsedSeconds; | ||||||
|  |       int frameCount = 0; | ||||||
|  |       std::map<std::string,Texture2D> textures; | ||||||
|  |       ShaderProgram shaderProgram; | ||||||
|  | 
 | ||||||
|  |       Objects3D objects; | ||||||
|  |        | ||||||
|  |       unsigned int VBO; | ||||||
|  |       unsigned int VAO; | ||||||
|  |        | ||||||
|  |       bool gWireframe = false; | ||||||
|  | 
 | ||||||
|  |       void onUpdate(); | ||||||
|  |       void loadHints(); | ||||||
|  |       void createObject(std::string name, std::string textures, std::vector<float>& vertices); | ||||||
|  |       void loadCallbacks(); | ||||||
|  |       void showFps(); | ||||||
|  |       void onCreate(); | ||||||
|  |       void onDestroy(); | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif // ENGINE_H
 | ||||||
							
								
								
									
										15
									
								
								include/loops.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/loops.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | #ifndef LOOPS_H | ||||||
|  | #define LOOPS_H | ||||||
|  | #include "ShaderProgram.h" | ||||||
|  | #include "Texture2D.h" | ||||||
|  | #include "engine.h" | ||||||
|  | #include <map> | ||||||
|  | 
 | ||||||
|  | namespace djalim { | ||||||
|  |   void rainbowWindow(double elapsedSeconds); | ||||||
|  |   void rgbTriangle(djalim::ShaderProgram shaderProgram, unsigned int VAO); | ||||||
|  |   //void cube(GLFWwindow* window, djalim::ShaderProgram shader, GLuint VAO, std::map<std::string, Texture2D>& textures); 
 | ||||||
|  |   void cube(GLFWwindow* window, djalim::ShaderProgram shader, Objects3D& objects); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif // LOOPS_H
 | ||||||
							
								
								
									
										7988
									
								
								include/stb_image/stb_image.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7988
									
								
								include/stb_image/stb_image.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										95
									
								
								src/core/ShaderProgram.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/core/ShaderProgram.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,95 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include <iostream> | ||||||
|  | #include <fstream> | ||||||
|  | #include <sstream> | ||||||
|  | 
 | ||||||
|  | djalim::ShaderProgram::ShaderProgram() : mHandle(0) {} | ||||||
|  | 
 | ||||||
|  | djalim::ShaderProgram::~ShaderProgram() { | ||||||
|  |     if (mHandle > 0) { | ||||||
|  |         glDeleteProgram(mHandle); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::use() { | ||||||
|  |     if (mHandle > 0) { | ||||||
|  |         glUseProgram(mHandle); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool djalim::ShaderProgram::loadShaders(const char* vertexShaderFile, const char* fragmentShaderFile) { | ||||||
|  |     std::string vertSourceStr = fileToString(vertexShaderFile); | ||||||
|  |     std::string fragSourceStr = fileToString(fragmentShaderFile); | ||||||
|  |     const char* vertSource = vertSourceStr.c_str(); | ||||||
|  |     const char* fragSource = fragSourceStr.c_str(); | ||||||
|  | 
 | ||||||
|  |     GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); | ||||||
|  |     glShaderSource(vertexShader, 1, &vertSource, NULL); | ||||||
|  |     glCompileShader(vertexShader); | ||||||
|  |     checkCompileErrors(vertexShader, "VERTEX"); | ||||||
|  | 
 | ||||||
|  |     GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); | ||||||
|  |     glShaderSource(fragmentShader, 1, &fragSource, NULL); | ||||||
|  |     glCompileShader(fragmentShader); | ||||||
|  |     checkCompileErrors(fragmentShader, "FRAGMENT"); | ||||||
|  | 
 | ||||||
|  |     mHandle = glCreateProgram(); | ||||||
|  |     glAttachShader(mHandle, vertexShader); | ||||||
|  |     glAttachShader(mHandle, fragmentShader); | ||||||
|  |     glLinkProgram(mHandle); | ||||||
|  |     checkCompileErrors(mHandle, "PROGRAM"); | ||||||
|  | 
 | ||||||
|  |     glDeleteShader(vertexShader); | ||||||
|  |     glDeleteShader(fragmentShader); | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::string djalim::ShaderProgram::fileToString(const std::string& filename) { | ||||||
|  |     std::ifstream fileStream(filename); | ||||||
|  |     if (!fileStream.is_open()) { | ||||||
|  |         std::cerr << "Erreur : Impossible d'ouvrir le fichier shader : " << filename << std::endl; | ||||||
|  |         return ""; | ||||||
|  |     } | ||||||
|  |     std::stringstream buffer; | ||||||
|  |     buffer << fileStream.rdbuf(); | ||||||
|  |     return buffer.str(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::checkCompileErrors(GLuint shader, std::string type) { | ||||||
|  |     GLint success; | ||||||
|  |     GLchar infoLog[1024]; | ||||||
|  |     if (type != "PROGRAM") { | ||||||
|  |         glGetShaderiv(shader, GL_COMPILE_STATUS, &success); | ||||||
|  |         if (!success) { | ||||||
|  |             glGetShaderInfoLog(shader, 1024, NULL, infoLog); | ||||||
|  |             std::cerr << "ERREUR::SHADER_COMPILATION_ERROR de type: " << type << "\n" << infoLog << std::endl; | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         glGetProgramiv(shader, GL_LINK_STATUS, &success); | ||||||
|  |         if (!success) { | ||||||
|  |             glGetProgramInfoLog(shader, 1024, NULL, infoLog); | ||||||
|  |             std::cerr << "ERREUR::PROGRAM_LINKING_ERROR de type: " << type << "\n" << infoLog << std::endl; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::setUniform(const std::string& name, const glm::vec4& value) { | ||||||
|  |     glUniform4f(glGetUniformLocation(mHandle, name.c_str()), value.x, value.y, value.z, value.w); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::setUniform(const std::string& name, const glm::mat4& value) { | ||||||
|  |     glUniformMatrix4fv(glGetUniformLocation(mHandle, name.c_str()), 1, GL_FALSE, &value[0][0]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::setUniform(const std::string& name, int value) { | ||||||
|  |     glUniform1i(glGetUniformLocation(mHandle, name.c_str()), value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::setUniform(const std::string& name, float value) { | ||||||
|  |     glUniform1f(glGetUniformLocation(mHandle, name.c_str()), value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::ShaderProgram::setUniform(const std::string& name, const glm::vec3& value) { | ||||||
|  |     glUniform3f(glGetUniformLocation(mHandle, name.c_str()), value.x, value.y, value.z); | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								src/core/Texture2D.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/core/Texture2D.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | #include "Texture2D.h" | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | #define STB_IMAGE_IMPLEMENTATION | ||||||
|  | #include <stb_image/stb_image.h> | ||||||
|  | 
 | ||||||
|  | Texture2D::Texture2D() : mTexture(0) {} | ||||||
|  | 
 | ||||||
|  | Texture2D::~Texture2D() { | ||||||
|  |     if (mTexture > 0) { | ||||||
|  |         glDeleteTextures(1, &mTexture); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool Texture2D::loadTexture(const std::string& filename, bool generateMipmaps) { | ||||||
|  |     int width, height, components; | ||||||
|  |     unsigned char* data = stbi_load(filename.c_str(), &width, &height, &components, STBI_rgb); | ||||||
|  |     if (data == NULL) { | ||||||
|  |         std::cerr << "Erreur: Impossible de charger la texture : " << filename << std::endl; | ||||||
|  |         std::cerr << "STBI Reason: " << stbi_failure_reason() << std::endl; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::cout << "Texture loaded successfully: " << filename << std::endl; | ||||||
|  |     std::cout << "Width: " << width << ", Height: " << height << ", Components: " << components << std::endl; | ||||||
|  | 
 | ||||||
|  |     glGenTextures(1, &mTexture); | ||||||
|  |     glBindTexture(GL_TEXTURE_2D, mTexture); | ||||||
|  | 
 | ||||||
|  |     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); | ||||||
|  | 
 | ||||||
|  |     if (generateMipmaps) { | ||||||
|  |         glGenerateMipmap(GL_TEXTURE_2D); | ||||||
|  |     } | ||||||
|  |     std::cout << "Mipmaps generated" << std::endl; | ||||||
|  | 
 | ||||||
|  |     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); | ||||||
|  |     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); | ||||||
|  |     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | ||||||
|  |     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | ||||||
|  | 
 | ||||||
|  |     stbi_image_free(data); | ||||||
|  | 
 | ||||||
|  |     glBindTexture(GL_TEXTURE_2D, 0); | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Texture2D::bind(GLuint texUnit) { | ||||||
|  |     glActiveTexture(GL_TEXTURE0 + texUnit); | ||||||
|  |     glBindTexture(GL_TEXTURE_2D, mTexture); | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								src/core/callbacks.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/core/callbacks.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | 
 | ||||||
|  | extern bool gWireframe; | ||||||
|  | 
 | ||||||
|  | // TODO Try to make callbacks more flexible
 | ||||||
|  | // there should not be a single function with 100+ if elses 💀
 | ||||||
|  | void mainCallback(GLFWwindow* window, int key, int scancode, int action, int mods) | ||||||
|  | { | ||||||
|  |   //TODO Extract this in a exitCallBack Function
 | ||||||
|  |   if ((key == GLFW_KEY_ESCAPE || key == GLFW_KEY_Q) && action == GLFW_PRESS) { | ||||||
|  |     glfwSetWindowShouldClose(window, GL_TRUE); | ||||||
|  |   } | ||||||
|  |   // end todo
 | ||||||
|  | 
 | ||||||
|  |   //TODO Extract this in a wireframeCallBack Function
 | ||||||
|  |   if (key == GLFW_KEY_W && action == GLFW_PRESS) | ||||||
|  |     gWireframe = !gWireframe; | ||||||
|  |   if (gWireframe) | ||||||
|  | 
 | ||||||
|  |     glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); | ||||||
|  |   else | ||||||
|  |     glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); | ||||||
|  |    // end todo
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::loadCallbacks(){ | ||||||
|  |   glfwSetKeyCallback(window, mainCallback); | ||||||
|  | } | ||||||
							
								
								
									
										106
									
								
								src/core/engine.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/core/engine.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include <cstdlib> | ||||||
|  | #include <iostream> | ||||||
|  | #include <utility> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | djalim::OpenGlEngine::OpenGlEngine(const char* title, int width, int height) { | ||||||
|  |   // initialize GLFW
 | ||||||
|  |   if (!glfwInit()) { | ||||||
|  |     std::cerr << "Failed to initialize GLFW" << std::endl; | ||||||
|  |     exit(1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   loadHints(); | ||||||
|  | 
 | ||||||
|  |   this->window = glfwCreateWindow(width, height, title, NULL, NULL); | ||||||
|  |   if (!this->window) { | ||||||
|  |     std::cerr << "Failed to create GLFW window" << std::endl; | ||||||
|  |     glfwTerminate(); | ||||||
|  |     exit(1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   glfwMakeContextCurrent(this->window); | ||||||
|  | 
 | ||||||
|  |   // initialize GLEW
 | ||||||
|  |   glewExperimental = GL_TRUE; | ||||||
|  |   if (glewInit() != GLEW_OK) { | ||||||
|  |     std::cerr << "Failed to initialize GLEW" << std::endl; | ||||||
|  |     exit(1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   loadCallbacks(); | ||||||
|  | 
 | ||||||
|  |   bool loaded = shaderProgram.loadShaders("../assets/shaders/vertex.glsl", "../assets/shaders/fragment.glsl"); | ||||||
|  |   if (!loaded) { | ||||||
|  |     std::cerr << "Failed to load shaders correctly" << std::endl; | ||||||
|  |     exit(1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   onCreate(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::createObject(std::string name, std::string textures, std::vector<float>& vertices){ | ||||||
|  |    | ||||||
|  |   objects[name]; | ||||||
|  | 
 | ||||||
|  |   bool textureLoaded = objects[name].texture.loadTexture(textures); | ||||||
|  |    | ||||||
|  |   if (!textureLoaded) { | ||||||
|  |     std::cerr << "Failed to load " << name << " texture!" << std::endl; | ||||||
|  |     exit(1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   //glGenVertexArrays(1, &VAO);
 | ||||||
|  |   glGenVertexArrays(1, &(objects[name].VAO)); | ||||||
|  | 
 | ||||||
|  |   //glGenBuffers(1, &VBO);
 | ||||||
|  |   glGenBuffers(1, &(objects[name].VBO)); | ||||||
|  |    | ||||||
|  |   //glBindVertexArray(VAO);
 | ||||||
|  |   glBindVertexArray(objects[name].VAO); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   //glBindBuffer(GL_ARRAY_BUFFER, VBO);
 | ||||||
|  |   glBindBuffer(GL_ARRAY_BUFFER, objects[name].VBO); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   std::cout << "Loading 3D objects with "<< vertices.size() << " vertices"<< std::endl; | ||||||
|  |   glBufferData(GL_ARRAY_BUFFER, sizeof(float)*vertices.size(), vertices.data(), GL_STATIC_DRAW); | ||||||
|  |    | ||||||
|  |   // Attribut de position
 | ||||||
|  |   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0); | ||||||
|  |   glEnableVertexAttribArray(0); | ||||||
|  |   // Attribut de coordonnée de texture
 | ||||||
|  |   glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); | ||||||
|  |   glEnableVertexAttribArray(1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | djalim::OpenGlEngine::~OpenGlEngine() { | ||||||
|  |   onDestroy(); | ||||||
|  |   glfwDestroyWindow(window); | ||||||
|  |   glfwTerminate(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::start(){ | ||||||
|  |   // Main loop
 | ||||||
|  | 
 | ||||||
|  |   double currentSeconds; | ||||||
|  |   while (!glfwWindowShouldClose(this->window)) { | ||||||
|  | 
 | ||||||
|  |     currentSeconds = glfwGetTime(); | ||||||
|  |     elapsedSeconds = currentSeconds-previousSeconds; | ||||||
|  |     previousSeconds = currentSeconds; | ||||||
|  | 
 | ||||||
|  |     glfwPollEvents(); | ||||||
|  |     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||||||
|  |     //glClearColor(0, 0.5, 0.5, 1.0f);
 | ||||||
|  | 
 | ||||||
|  |     onUpdate(); | ||||||
|  | 
 | ||||||
|  |     glfwSwapBuffers(this->window); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/core/hints.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/core/hints.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::loadHints(){ | ||||||
|  |     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); | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/loops/cube.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/loops/cube.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | #include "ShaderProgram.h" | ||||||
|  | #include "Texture2D.h" | ||||||
|  | #include "engine.h" | ||||||
|  | #include "loops.h" | ||||||
|  | #include <GL/glew.h> | ||||||
|  | #include <GLFW/glfw3.h> | ||||||
|  | #include <glm/glm.hpp> | ||||||
|  | #include <glm/gtc/matrix_transform.hpp> | ||||||
|  | #include <glm/gtc/type_ptr.hpp> | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | // void djalim::cube(GLFWwindow* window, djalim::ShaderProgram shader, GLuint VAO, std::map<std::string, Texture2D>& textures){
 | ||||||
|  | //
 | ||||||
|  | //     shader.use();
 | ||||||
|  | //     shader.setUniform("ourTexture", 0);
 | ||||||
|  | //     textures["cube"].bind();
 | ||||||
|  | //
 | ||||||
|  | //     // Matrice de Projection
 | ||||||
|  | //     glm::mat4 projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
 | ||||||
|  | //     shader.setUniform("projection", projection); // Assurez-vous que setUniform pour mat4 est implémenté
 | ||||||
|  | //
 | ||||||
|  | //     // Matrice de Vue
 | ||||||
|  | //     glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), // Position caméra
 | ||||||
|  | //         glm::vec3(0.0f, 0.0f, 0.0f), // Cible
 | ||||||
|  | //         glm::vec3(0.0f, 1.0f, 0.0f)); // Axe Haut
 | ||||||
|  | //     shader.setUniform("view", view);
 | ||||||
|  | //
 | ||||||
|  | //     // Matrice Modèle
 | ||||||
|  | //     glm::mat4 model = glm::mat4(1.0f);
 | ||||||
|  | //     model = glm::rotate(model, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));
 | ||||||
|  | //     shader.setUniform("model", model);
 | ||||||
|  | //
 | ||||||
|  | //     // Dessiner le cube
 | ||||||
|  | //     glBindVertexArray(VAO);
 | ||||||
|  | //     glDrawArrays(GL_TRIANGLES, 0, 36);
 | ||||||
|  | //
 | ||||||
|  | // }
 | ||||||
|  | 
 | ||||||
|  | void djalim::cube(GLFWwindow* window, djalim::ShaderProgram shader, Objects3D& objects){ | ||||||
|  | 
 | ||||||
|  |     shader.use(); | ||||||
|  |     shader.setUniform("ourTexture", 0); | ||||||
|  |      | ||||||
|  |     objects["cube"].texture.bind(); | ||||||
|  |     //textures["cube"].bind();
 | ||||||
|  | 
 | ||||||
|  |     // Matrice de Projection
 | ||||||
|  |     glm::mat4 projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f); | ||||||
|  |     shader.setUniform("projection", projection); // Assurez-vous que setUniform pour mat4 est implémenté
 | ||||||
|  | 
 | ||||||
|  |     // Matrice de Vue
 | ||||||
|  |     glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), // Position caméra
 | ||||||
|  |         glm::vec3(0.0f, 0.0f, 0.0f), // Cible
 | ||||||
|  |         glm::vec3(0.0f, 1.0f, 0.0f)); // Axe Haut
 | ||||||
|  |     shader.setUniform("view", view); | ||||||
|  | 
 | ||||||
|  |     // Matrice Modèle
 | ||||||
|  |     glm::mat4 model = glm::mat4(1.0f); | ||||||
|  |     model = glm::rotate(model, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f)); | ||||||
|  |     shader.setUniform("model", model); | ||||||
|  | 
 | ||||||
|  |     // Dessiner le cube
 | ||||||
|  |     glBindVertexArray(objects["cube"].VAO); | ||||||
|  |     glDrawArrays(GL_TRIANGLES, 0, 36); | ||||||
|  | 
 | ||||||
|  |     //std::cout << objects["cube"].VAO << std::endl;
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								src/loops/rainbowWindow.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/loops/rainbowWindow.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include "loops.h" | ||||||
|  | #include "iostream" | ||||||
|  | #include <GL/gl.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void djalim::rainbowWindow(double elapsedSeconds){ | ||||||
|  |   static double red = 0.0; | ||||||
|  |   static double green= 0.0; | ||||||
|  |   static double blue = 0.0; | ||||||
|  |   static double thresh = 0.0; | ||||||
|  | 
 | ||||||
|  |   thresh += elapsedSeconds; | ||||||
|  | 
 | ||||||
|  |   if (thresh >0.1){ | ||||||
|  |     thresh = 0.0; | ||||||
|  |     red += 0.1; | ||||||
|  |     if( red > 1.0 ) { | ||||||
|  |       red = 0.0; | ||||||
|  |       green += 0.1; | ||||||
|  |       if( green > 1.0 ) { | ||||||
|  |         green = 0.0; | ||||||
|  |         blue += 0.1; | ||||||
|  |         if( blue > 1.0 ) { | ||||||
|  |           blue = 0.0; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   std::cout << "red: " << red << ", green: " << green << ", blue: " << blue << "    \r"; | ||||||
|  |   glClearColor(red, green, blue, 1.0f); | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								src/loops/rbgTriangle.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/loops/rbgTriangle.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include "loops.h" | ||||||
|  | 
 | ||||||
|  | void djalim::rgbTriangle(djalim::ShaderProgram shaderProgram, unsigned int VAO){ | ||||||
|  |   // Dessiner le triangle
 | ||||||
|  |   shaderProgram.use(); | ||||||
|  |   glBindVertexArray(VAO); | ||||||
|  |   glDrawArrays(GL_TRIANGLES, 0, 3); | ||||||
|  | 
 | ||||||
|  |   glClearColor(0, 0.5, 0.5, 1.0f); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								src/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | 
 | ||||||
|  | int main() { | ||||||
|  |   djalim::OpenGlEngine engine = djalim::OpenGlEngine("Mon app", 800, 600); | ||||||
|  |   engine.start(); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
							
								
								
									
										76
									
								
								src/onCreate.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/onCreate.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include "Texture2D.h" | ||||||
|  | #include <iostream> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::onCreate(){ | ||||||
|  |     glEnable(GL_DEPTH_TEST); | ||||||
|  |     std::vector<float> vertices { | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 0.0f, | ||||||
|  |          0.5f, -0.5f, -0.5f,  1.0f, 0.0f, | ||||||
|  |          0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |          0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |         -0.5f,  0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 0.0f, | ||||||
|  | 
 | ||||||
|  |         -0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |          0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 1.0f, | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 1.0f, | ||||||
|  |         -0.5f,  0.5f,  0.5f,  0.0f, 1.0f, | ||||||
|  |         -0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  | 
 | ||||||
|  |         -0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |         -0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |         -0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |         -0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 
 | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |          0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |          0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |          0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |          0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  | 
 | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |          0.5f, -0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |          0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |          0.5f, -0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |         -0.5f, -0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |         -0.5f, -0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  | 
 | ||||||
|  |         -0.5f,  0.5f, -0.5f,  0.0f, 1.0f, | ||||||
|  |          0.5f,  0.5f, -0.5f,  1.0f, 1.0f, | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |          0.5f,  0.5f,  0.5f,  1.0f, 0.0f, | ||||||
|  |         -0.5f,  0.5f,  0.5f,  0.0f, 0.0f, | ||||||
|  |         -0.5f,  0.5f, -0.5f,  0.0f, 1.0f | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     stbi_set_flip_vertically_on_load(true); | ||||||
|  |     createObject("cube", "../assets/textures/prof.png", vertices); | ||||||
|  |      | ||||||
|  |     // textures["cube"] = Texture2D();
 | ||||||
|  |     // bool textureLoaded = textures["cube"].loadTexture("../assets/textures/prof.png");
 | ||||||
|  |     // if (!textureLoaded) {
 | ||||||
|  |     //     std::cerr << "Failed to load cube texture!" << std::endl;
 | ||||||
|  |     //     return;
 | ||||||
|  |     // }
 | ||||||
|  |     //
 | ||||||
|  |     // glGenVertexArrays(1, &VAO);
 | ||||||
|  |     // glGenBuffers(1, &VBO);
 | ||||||
|  |     // glBindVertexArray(VAO);
 | ||||||
|  |     // glBindBuffer(GL_ARRAY_BUFFER, VBO);
 | ||||||
|  |     // glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 | ||||||
|  |     // // Attribut de position
 | ||||||
|  |     // glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
 | ||||||
|  |     // glEnableVertexAttribArray(0);
 | ||||||
|  |     // // Attribut de coordonnée de texture
 | ||||||
|  |     // glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
 | ||||||
|  |     // glEnableVertexAttribArray(1);
 | ||||||
|  | 
 | ||||||
|  |     // juste pour voir le cube
 | ||||||
|  |     glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								src/onDestroy.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/onDestroy.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::onDestroy(){ | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								src/onUpdate.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/onUpdate.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | #include <GL/gl.h> | ||||||
|  | #include "loops.h" | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::onUpdate(){ | ||||||
|  |   showFps(); | ||||||
|  |    | ||||||
|  |   cube(window,shaderProgram,objects); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								src/utils/showFps.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/utils/showFps.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | #include "engine.h" | ||||||
|  | 
 | ||||||
|  | void djalim::OpenGlEngine::showFps() | ||||||
|  | { | ||||||
|  |     static double thresh = 0.0; | ||||||
|  | 
 | ||||||
|  |     thresh += elapsedSeconds; | ||||||
|  | 
 | ||||||
|  |     if (thresh > 0.25) | ||||||
|  |     { | ||||||
|  |         double fps = (double)frameCount / thresh; | ||||||
|  |         double msPerFrame = 1000.0 / fps; | ||||||
|  | 
 | ||||||
|  |         std::ostringstream outs; | ||||||
|  |         outs.precision(3); | ||||||
|  |         outs << std::fixed | ||||||
|  |              << "FPS: " << fps << "   " | ||||||
|  |              << "Frame Time: " << msPerFrame << "(ms)"; | ||||||
|  |         glfwSetWindowTitle(window, outs.str().c_str()); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         frameCount = 0; | ||||||
|  |         thresh = 0.0; | ||||||
|  |     } | ||||||
|  |     frameCount++; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user