diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ad87ddf..9ffffd8 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -15,10 +15,7 @@ "${workspaceFolder}/Engine/engine/glad.c", "-o", "${workspaceFolder}/Engine/engine/match", "-lglut", "-lglfw", "-lGLU", "-lGL", "-lm", - "-ldl", - - - + "-ldl" ], "options": { "cwd": "${fileDirname}" diff --git a/Engine/engine/Shaders/fragmentShaderTaskThree.fs b/Engine/engine/Shaders/fragmentShaderTaskThree.fs new file mode 100644 index 0000000..9596729 --- /dev/null +++ b/Engine/engine/Shaders/fragmentShaderTaskThree.fs @@ -0,0 +1,7 @@ +#version 330 core +out vec4 FragColor; +in vec3 vertexColor; // from vertex +void main() +{ + FragColor = vec4(vertexColor, 1.0); +} \ No newline at end of file diff --git a/Engine/engine/Shaders/vertexShaderOffset.vs b/Engine/engine/Shaders/vertexShaderOffset.vs new file mode 100644 index 0000000..cf00465 --- /dev/null +++ b/Engine/engine/Shaders/vertexShaderOffset.vs @@ -0,0 +1,16 @@ +// In your vertex shader: +// ====================== +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aColor; + +out vec3 ourColor; + +uniform float xOffset; + +void main() +{ + gl_Position = vec4(aPos.x + xOffset, aPos.y, aPos.z, 1.0); // add the xOffset to the x position of the vertex position + ourColor = aColor; +} + diff --git a/Engine/engine/Shaders/vertexShaderTaskThree.vs b/Engine/engine/Shaders/vertexShaderTaskThree.vs new file mode 100644 index 0000000..52301a2 --- /dev/null +++ b/Engine/engine/Shaders/vertexShaderTaskThree.vs @@ -0,0 +1,8 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +out vec3 vertexColor; // output a color to fragment shader +void main() +{ + gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); + vertexColor = aPos; +} \ No newline at end of file diff --git a/Engine/engine/Shaders/vertexShaderUpsideDown.vs b/Engine/engine/Shaders/vertexShaderUpsideDown.vs new file mode 100644 index 0000000..76257c3 --- /dev/null +++ b/Engine/engine/Shaders/vertexShaderUpsideDown.vs @@ -0,0 +1,6 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +void main() +{ + gl_Position = vec4(aPos.x, -aPos.y, aPos.z, 1.0); +} \ No newline at end of file diff --git a/Engine/engine/constants.hpp b/Engine/engine/constants.hpp index 97649da..c1b298f 100644 --- a/Engine/engine/constants.hpp +++ b/Engine/engine/constants.hpp @@ -4,6 +4,7 @@ #include #include + namespace constants { inline constexpr int GLFW_MAJOR_VERSION { 3 }; @@ -47,7 +48,13 @@ namespace constants "./Shaders/vertexShaderColor.vs" }; - + inline const char* VERTEX_SHADER_UPSIDE_DOWN_FILENAME { + "./Shaders/vertexShaderUpsideDown.vs" + }; + + inline const char* VERTEX_SHADER_OFFSET_FILENAME { + "./Shaders/vertexShaderOffset.vs" + }; // we write vertex shader // version of glsl (since ogl 3.3 same as ogl so we pick 330) @@ -77,6 +84,14 @@ namespace constants "./Shaders/vertexShaderVerticeColor.vs" }; + inline const char* VERTEX_SHADER_TASK_THREE_FILENAME { + "./Shaders/vertexShaderTaskThree.vs" + }; + + inline const char* FRAGMENT_SHADER_TASK_THREE_FILENAME { + "./Shaders/fragmentShaderTaskThree.fs" + }; + // ... to fragment shader (vertexColor) inline const char *FRAGMENT_SHADER_COLOR_FROM_VERTEX { "#version 330 core\n" @@ -219,7 +234,7 @@ namespace constants inline constexpr size_t SQUARE_VERTICES_SIZE = { sizeof(SQUARE_VERTICES) }; - inline constexpr int MAX_DRAW_CALL = { 8 }; + inline constexpr int MAX_DRAW_CALL = { 10 }; } diff --git a/Engine/engine/draw.cpp b/Engine/engine/draw.cpp index c3a8bbd..984b605 100644 --- a/Engine/engine/draw.cpp +++ b/Engine/engine/draw.cpp @@ -16,30 +16,39 @@ int drawFigure(const int whatToDraw) switch (whatToDraw) { case 0: - return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false); + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME); case 1: return drawSquareClass(constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME); case 2: // Try to draw 2 triangles next to each other using glDrawArrays by adding more vertices to your data. - return drawTriangleClass(constants::TRIANGLES_VERTICES, constants::TRIANGLES_VERTICES_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false); + return drawTriangleClass(constants::TRIANGLES_VERTICES, constants::TRIANGLES_VERTICES_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME); case 3: // Now create the same 2 triangles using two different VAOs and VBOs for their data - return (drawTriangleClass(constants::TRIANGLE_ONE, constants::TRIANGLE_ONE_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false) == -1 || drawTriangleClass(constants::TRIANGLE_TWO, constants::TRIANGLE_TWO_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false) == -1); + return (drawTriangleClass(constants::TRIANGLE_ONE, constants::TRIANGLE_ONE_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME) == -1 || drawTriangleClass(constants::TRIANGLE_TWO, constants::TRIANGLE_TWO_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME) == -1); case 4: // Create two shader programs where the second program uses a different fragment shader that outputs the color yellow; draw both triangles again where one outputs the color yellow - return (drawTriangleClass(constants::TRIANGLE_ONE, constants::TRIANGLE_ONE_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false) == -1 || drawTriangleClass(constants::TRIANGLE_TWO, constants::TRIANGLE_TWO_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_YELLOW_FILENAME, false) == -1); + return (drawTriangleClass(constants::TRIANGLE_ONE, constants::TRIANGLE_ONE_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME) == -1 || drawTriangleClass(constants::TRIANGLE_TWO, constants::TRIANGLE_TWO_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_YELLOW_FILENAME) == -1); case 5: // Get color from vertex shader to fragment shader - return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_COLOR_FILENAME, constants::FRAGMENT_SHADER_COLOR_FROM_VERTEX_FILENAME, false); + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_COLOR_FILENAME, constants::FRAGMENT_SHADER_COLOR_FROM_VERTEX_FILENAME); case 6: // set color from opengl code to uniform value in fragment shader - return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_COLOR_FILENAME, constants::FRAGMENT_SHADER_UNIFORMS_FILENAME, false); + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_COLOR_FILENAME, constants::FRAGMENT_SHADER_UNIFORMS_FILENAME); case 7: // set color from opengl code to uniform value in fragment shader return drawTriangleClass(constants::TRIANGLE_COLORS, constants::TRIANGLE_COLORS_SIZE, constants::VERTEX_SHADER_VERTICE_COLOR_FILENAME, constants::FRAGMENT_SHADER_COLOR_FROM_VERTEX_FILENAME, true); + case 8: + // upside down triangle + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_UPSIDE_DOWN_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME); + case 9: + { + // offset triangle + offsetsStruct offsets = offsetsStruct(); + offsets.xOffset = 0.5f; + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_OFFSET_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false, offsets); + } case constants::MAX_DRAW_CALL: - // set color from opengl code to uniform value in fragment shader - return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_SOURCE_FILENAME, constants::FRAGMENT_SHADER_SOURCE_FILENAME, false); + return drawTriangleClass(constants::TRIANGLE_VERTICES, constants::TRIANGLE_VERTICES_SIZE, constants::VERTEX_SHADER_TASK_THREE_FILENAME, constants::FRAGMENT_SHADER_TASK_THREE_FILENAME); default: throw "No function for this draw call"; } @@ -57,10 +66,22 @@ unsigned int getShaderProgram(const char* vertexShaderSource, const char* fragme return shaderProgram; } -int drawTriangleClass(const float triangleVertices[], const size_t triangleVerticesSize, const char* vertexPath, const char* fragmentPath, const bool colorIncluded) +void setOffsets(Shader shader, const offsetsStruct offsets) { + shader.setFloat("xOffset", offsets.xOffset); + shader.setFloat("yOffset", offsets.yOffset); + shader.setFloat("zOffset", offsets.zOffset); +} + +int drawTriangleClass(const float triangleVertices[], const size_t triangleVerticesSize, const char* vertexPath, const char* fragmentPath, const bool colorIncluded, const offsetsStruct offsets) { + // In your CPP file: + // ====================== + // float offset = 0.5f; + Shader ourShader(vertexPath, fragmentPath); ourShader.use(); + setOffsets(ourShader, offsets); + const unsigned int vertexBufferObject = copyVerticesMemory(triangleVertices, triangleVerticesSize, GL_ARRAY_BUFFER); const unsigned int vertexArrayObject = generateBindVAO(); copyVerticesArray(vertexBufferObject, triangleVertices, triangleVerticesSize, GL_ARRAY_BUFFER); diff --git a/Engine/engine/draw.hpp b/Engine/engine/draw.hpp index a9a9762..6eee203 100644 --- a/Engine/engine/draw.hpp +++ b/Engine/engine/draw.hpp @@ -4,12 +4,17 @@ #include #include +struct offsetsStruct { + offsetsStruct(): xOffset(0), yOffset(0), zOffset(0) { } + float xOffset, yOffset, zOffset; +}; + int drawFigure(const int whatToDraw); int drawSquare(const char* vertexShaderSource, const char* fragmentShaderSource); int drawSquareClass(const char* vertexPath, const char* fragmentPath); void doDrawElements(const unsigned int shaderProgram, const unsigned int vertexArrayObject, const GLenum drawArrayMode, const GLenum drawType, const int numberOfElementsToDraw); int drawTriangle(const float triangleVertices[], const size_t triangleVerticesSize, const char* vertexShaderSource, const char* fragmentShaderSource, const bool colorIncluded); -int drawTriangleClass(const float triangleVertices[], const size_t triangleVerticesSize, const char* vertexPath, const char* fragmentPath, const bool colorIncluded); +int drawTriangleClass(const float triangleVertices[], const size_t triangleVerticesSize, const char* vertexPath, const char* fragmentPath, const bool colorIncluded = false, const offsetsStruct offsets = offsetsStruct()); void updateUniformColor(const unsigned int shaderProgram, const GLchar* uniformName); void doDrawArrays(const unsigned int shaderProgram, const unsigned int vertexArrayObject, const GLenum drawArrayMode, const int firstIndex, const unsigned int numberOfIndicesToBeRendered ); unsigned int drawSquareShaderProgram(const char* vertexShaderSource, const char* fragmentShaderSource); diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/beforeRender.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/beforeRender.hpp.gcm new file mode 100644 index 0000000..a635711 Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/beforeRender.hpp.gcm differ diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/draw.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/draw.hpp.gcm new file mode 100644 index 0000000..502524e Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/draw.hpp.gcm differ diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/misc.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/misc.hpp.gcm new file mode 100644 index 0000000..659d796 Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/misc.hpp.gcm differ diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/renderLoop.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/renderLoop.hpp.gcm new file mode 100644 index 0000000..4646b88 Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/renderLoop.hpp.gcm differ diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shader.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shader.hpp.gcm new file mode 100644 index 0000000..fd0aafd Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shader.hpp.gcm differ diff --git a/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shaders.hpp.gcm b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shaders.hpp.gcm new file mode 100644 index 0000000..dee5185 Binary files /dev/null and b/Engine/engine/gcm.cache/home/kuchy/engineer-thesis-WUT/Engine/engine/shaders.hpp.gcm differ diff --git a/Engine/engine/match b/Engine/engine/match index bc30db6..893f4e6 100755 Binary files a/Engine/engine/match and b/Engine/engine/match differ diff --git a/Engine/engine/shader.hpp b/Engine/engine/shader.hpp index 4046371..c9a5298 100644 --- a/Engine/engine/shader.hpp +++ b/Engine/engine/shader.hpp @@ -31,5 +31,6 @@ private: // utility function for checking shader compilation/linking errors. // ------------------------------------------------------------------------ void checkCompileErrors(unsigned int shader, std::string type); + void compileErrorsMessage(const unsigned int shader, const bool compilation, const std::string type, const std::string errorMessage); }; #endif