diff --git a/.vs/OpenGL/v17/.suo b/.vs/OpenGL/v17/.suo index e5bafe2..94c903f 100644 Binary files a/.vs/OpenGL/v17/.suo and b/.vs/OpenGL/v17/.suo differ diff --git a/.vs/OpenGL/v17/Browse.VC.db b/.vs/OpenGL/v17/Browse.VC.db index 6ba7f3d..8f5100a 100644 Binary files a/.vs/OpenGL/v17/Browse.VC.db and b/.vs/OpenGL/v17/Browse.VC.db differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/1a89d84355aa73c3/VERTEXARRAY.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/1a89d84355aa73c3/VERTEXARRAY.ipch new file mode 100644 index 0000000..691ba0e Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/1a89d84355aa73c3/VERTEXARRAY.ipch differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/6164a016e334bea5/VERTEXBUFFER.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/6164a016e334bea5/VERTEXBUFFER.ipch new file mode 100644 index 0000000..c2a1bae Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/6164a016e334bea5/VERTEXBUFFER.ipch differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/67c994b9f0b48893/INDEXBUFFER.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/67c994b9f0b48893/INDEXBUFFER.ipch new file mode 100644 index 0000000..696fd0a Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/67c994b9f0b48893/INDEXBUFFER.ipch differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/69fe50f9c0bee003/APPLICATION.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/69fe50f9c0bee003/APPLICATION.ipch new file mode 100644 index 0000000..100feaf Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/69fe50f9c0bee003/APPLICATION.ipch differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/bfcc1813f187b59e/VERTEXARRAY.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/bfcc1813f187b59e/VERTEXARRAY.ipch new file mode 100644 index 0000000..75fe43e Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/bfcc1813f187b59e/VERTEXARRAY.ipch differ diff --git a/.vs/OpenGL/v17/ipch/AutoPCH/e811e4b2e57a3b52/VERTEXBUFFERLAYOUT.ipch b/.vs/OpenGL/v17/ipch/AutoPCH/e811e4b2e57a3b52/VERTEXBUFFERLAYOUT.ipch new file mode 100644 index 0000000..0c3039f Binary files /dev/null and b/.vs/OpenGL/v17/ipch/AutoPCH/e811e4b2e57a3b52/VERTEXBUFFERLAYOUT.ipch differ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..0cf5ea5 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "No Configurations" +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index dc852fe..9378d3a 100644 Binary files a/.vs/slnx.sqlite and b/.vs/slnx.sqlite differ diff --git a/Debug/OpenGL.exe b/Debug/OpenGL.exe index 52733be..f2071c6 100644 Binary files a/Debug/OpenGL.exe and b/Debug/OpenGL.exe differ diff --git a/Debug/OpenGL.pdb b/Debug/OpenGL.pdb index b14bf3b..433e925 100644 Binary files a/Debug/OpenGL.pdb and b/Debug/OpenGL.pdb differ diff --git a/OpenGL/Debug/Application.obj b/OpenGL/Debug/Application.obj index 67fef3c..7672411 100644 Binary files a/OpenGL/Debug/Application.obj and b/OpenGL/Debug/Application.obj differ diff --git a/OpenGL/Debug/IndexBuffer.obj b/OpenGL/Debug/IndexBuffer.obj index f66effc..c46e16c 100644 Binary files a/OpenGL/Debug/IndexBuffer.obj and b/OpenGL/Debug/IndexBuffer.obj differ diff --git a/OpenGL/Debug/OpenGL.exe.recipe b/OpenGL/Debug/OpenGL.exe.recipe index a91c679..17f036d 100644 --- a/OpenGL/Debug/OpenGL.exe.recipe +++ b/OpenGL/Debug/OpenGL.exe.recipe @@ -2,7 +2,7 @@ - D:\cpp\OpenGL\Debug\OpenGL.exe + C:\dev\OpenGL\Debug\OpenGL.exe diff --git a/OpenGL/Debug/OpenGL.ilk b/OpenGL/Debug/OpenGL.ilk index 815ece4..f91677b 100644 Binary files a/OpenGL/Debug/OpenGL.ilk and b/OpenGL/Debug/OpenGL.ilk differ diff --git a/OpenGL/Debug/OpenGL.log b/OpenGL/Debug/OpenGL.log index 65f511a..fddcb41 100644 --- a/OpenGL/Debug/OpenGL.log +++ b/OpenGL/Debug/OpenGL.log @@ -1,5 +1,10 @@  Application.cpp + IndexBuffer.cpp + Renderer.cpp + VertexArray.cpp + VertexBuffer.cpp + Generating Code... LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library -glew32s.lib(glew.obj) : warning LNK4099: PDB 'vc120.pdb' was not found with 'glew32s.lib(glew.obj)' or at 'D:\cpp\OpenGL\Debug\vc120.pdb'; linking object as if no debug info - OpenGL.vcxproj -> D:\cpp\OpenGL\Debug\OpenGL.exe +glew32s.lib(glew.obj) : warning LNK4099: PDB 'vc120.pdb' was not found with 'glew32s.lib(glew.obj)' or at 'C:\dev\OpenGL\Debug\vc120.pdb'; linking object as if no debug info + OpenGL.vcxproj -> C:\dev\OpenGL\Debug\OpenGL.exe diff --git a/OpenGL/Debug/OpenGL.tlog/CL.command.1.tlog b/OpenGL/Debug/OpenGL.tlog/CL.command.1.tlog index 6958b21..0b83dcb 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/CL.command.1.tlog and b/OpenGL/Debug/OpenGL.tlog/CL.command.1.tlog differ diff --git a/OpenGL/Debug/OpenGL.tlog/CL.read.1.tlog b/OpenGL/Debug/OpenGL.tlog/CL.read.1.tlog index 71f9ab2..5d3c98e 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/CL.read.1.tlog and b/OpenGL/Debug/OpenGL.tlog/CL.read.1.tlog differ diff --git a/OpenGL/Debug/OpenGL.tlog/CL.write.1.tlog b/OpenGL/Debug/OpenGL.tlog/CL.write.1.tlog index 6db3f97..ee1d9e2 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/CL.write.1.tlog and b/OpenGL/Debug/OpenGL.tlog/CL.write.1.tlog differ diff --git a/OpenGL/Debug/OpenGL.tlog/OpenGL.lastbuildstate b/OpenGL/Debug/OpenGL.tlog/OpenGL.lastbuildstate index 20f3372..e1d27b8 100644 --- a/OpenGL/Debug/OpenGL.tlog/OpenGL.lastbuildstate +++ b/OpenGL/Debug/OpenGL.tlog/OpenGL.lastbuildstate @@ -1,2 +1,2 @@ -PlatformToolSet=v143:VCToolArchitecture=Native32Bit:VCToolsVersion=14.31.31103:TargetPlatformVersion=10.0.19041.0: -Debug|Win32|D:\cpp\OpenGL\| +PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:VCServicingVersionCrtHeaders=14.29.30136:TargetPlatformVersion=10.0.19041.0: +Debug|Win32|C:\dev\OpenGL\| diff --git a/OpenGL/Debug/OpenGL.tlog/link.command.1.tlog b/OpenGL/Debug/OpenGL.tlog/link.command.1.tlog index 52278d7..da4da45 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/link.command.1.tlog and b/OpenGL/Debug/OpenGL.tlog/link.command.1.tlog differ diff --git a/OpenGL/Debug/OpenGL.tlog/link.read.1.tlog b/OpenGL/Debug/OpenGL.tlog/link.read.1.tlog index 2c2fa0c..bba643d 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/link.read.1.tlog and b/OpenGL/Debug/OpenGL.tlog/link.read.1.tlog differ diff --git a/OpenGL/Debug/OpenGL.tlog/link.write.1.tlog b/OpenGL/Debug/OpenGL.tlog/link.write.1.tlog index d5c7d51..f3eea9a 100644 Binary files a/OpenGL/Debug/OpenGL.tlog/link.write.1.tlog and b/OpenGL/Debug/OpenGL.tlog/link.write.1.tlog differ diff --git a/OpenGL/Debug/Renderer.obj b/OpenGL/Debug/Renderer.obj index 49f6f9c..63e7b2b 100644 Binary files a/OpenGL/Debug/Renderer.obj and b/OpenGL/Debug/Renderer.obj differ diff --git a/OpenGL/Debug/VertexArray.obj b/OpenGL/Debug/VertexArray.obj new file mode 100644 index 0000000..cbc55ec Binary files /dev/null and b/OpenGL/Debug/VertexArray.obj differ diff --git a/OpenGL/Debug/VertexBuffer.obj b/OpenGL/Debug/VertexBuffer.obj index 47115b1..446c973 100644 Binary files a/OpenGL/Debug/VertexBuffer.obj and b/OpenGL/Debug/VertexBuffer.obj differ diff --git a/OpenGL/Debug/vc142.idb b/OpenGL/Debug/vc142.idb new file mode 100644 index 0000000..7ec4620 Binary files /dev/null and b/OpenGL/Debug/vc142.idb differ diff --git a/OpenGL/Debug/vc142.pdb b/OpenGL/Debug/vc142.pdb new file mode 100644 index 0000000..7043855 Binary files /dev/null and b/OpenGL/Debug/vc142.pdb differ diff --git a/OpenGL/Debug/vc143.idb b/OpenGL/Debug/vc143.idb index 31001fd..85d43cc 100644 Binary files a/OpenGL/Debug/vc143.idb and b/OpenGL/Debug/vc143.idb differ diff --git a/OpenGL/Debug/vc143.pdb b/OpenGL/Debug/vc143.pdb index c31e4c2..6fbc130 100644 Binary files a/OpenGL/Debug/vc143.pdb and b/OpenGL/Debug/vc143.pdb differ diff --git a/OpenGL/OpenGL.vcxproj b/OpenGL/OpenGL.vcxproj index f640133..763d93d 100644 --- a/OpenGL/OpenGL.vcxproj +++ b/OpenGL/OpenGL.vcxproj @@ -29,7 +29,7 @@ Application true - v143 + v142 Unicode @@ -154,6 +154,7 @@ + @@ -163,6 +164,8 @@ + + diff --git a/OpenGL/OpenGL.vcxproj.filters b/OpenGL/OpenGL.vcxproj.filters index 9cf59c6..d4c9dc3 100644 --- a/OpenGL/OpenGL.vcxproj.filters +++ b/OpenGL/OpenGL.vcxproj.filters @@ -27,6 +27,9 @@ Source Files + + Source Files + @@ -41,5 +44,11 @@ Header Files + + Header Files + + + Header Files + \ No newline at end of file diff --git a/OpenGL/src/Application.cpp b/OpenGL/src/Application.cpp index 3a29a94..f4a4802 100644 --- a/OpenGL/src/Application.cpp +++ b/OpenGL/src/Application.cpp @@ -10,6 +10,7 @@ #include "Renderer.h" #include "VertexBuffer.h" #include "IndexBuffer.h" +#include "VertexArray.h" struct ShaderProgramSource { @@ -155,10 +156,12 @@ int main(void) GLCall(glGenVertexArrays(1, &vao)); GLCall(glBindVertexArray(vao)); + VertexArray va; VertexBuffer vb(triforcePos, 6 * 2 * sizeof(float)); - - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); + + VertexBufferLayout layout; + layout.Push(2); + va.AddBuffer(vb, layout); IndexBuffer ib(triforceInd, 3 * 3); @@ -191,7 +194,7 @@ int main(void) glUseProgram(shader); glUniform4f(location, r, 1.0f, 0.0f, 1.0f); - GLCall(glBindVertexArray(vao)); + va.Bind(); ib.Bind(); GLCall(glDrawElements(GL_TRIANGLES, 9, GL_UNSIGNED_INT, nullptr)); diff --git a/OpenGL/src/VertexArray.cpp b/OpenGL/src/VertexArray.cpp new file mode 100644 index 0000000..d32b019 --- /dev/null +++ b/OpenGL/src/VertexArray.cpp @@ -0,0 +1,37 @@ +#include "VertexArray.h" +#include "Renderer.h" + +VertexArray::VertexArray() +{ + GLCall(glGenVertexArrays(1, &m_RendererID)); +} + +VertexArray::~VertexArray() +{ + GLCall(glDeleteVertexArrays(1, &m_RendererID)); +} + +void VertexArray::AddBuffer(const VertexBuffer& vb, const VertexBufferLayout& layout) +{ + Bind(); + vb.Bind(); + const auto& elements = layout.GetElements(); + unsigned int offset = 0; + for(unsigned int i = 0; i < elements.size(); i++) + { + const auto& element = elements[i]; + GLCall(glEnableVertexAttribArray(i)); + GLCall(glVertexAttribPointer(i , element.count, element.type, element.normalized, layout.GetStride(), (const void*) offset)); + offset += element.count * VertexBufferElement::GetSizeOfType(element.type); + } +} + +void VertexArray::Bind() const +{ + GLCall(glBindVertexArray(m_RendererID)); +} + +void VertexArray::Unbind() const +{ + GLCall(glBindVertexArray(m_RendererID)); +} diff --git a/OpenGL/src/VertexArray.h b/OpenGL/src/VertexArray.h new file mode 100644 index 0000000..960a516 --- /dev/null +++ b/OpenGL/src/VertexArray.h @@ -0,0 +1,18 @@ +#pragma once +#include "VertexBuffer.h" +#include "VertexBufferLayout.h" + +class VertexArray +{ +private: + unsigned int m_RendererID; +public: + VertexArray(); + ~VertexArray(); + + void AddBuffer(const VertexBuffer& vb, const VertexBufferLayout& layout); + + void Bind() const; + void Unbind() const; + +}; \ No newline at end of file diff --git a/OpenGL/src/VertexBufferLayout.h b/OpenGL/src/VertexBufferLayout.h new file mode 100644 index 0000000..ceaaf49 --- /dev/null +++ b/OpenGL/src/VertexBufferLayout.h @@ -0,0 +1,68 @@ +#pragma once +#include +#include + +#include "Renderer.h" +#include + +struct VertexBufferElement +{ + unsigned int type; + unsigned int count; + unsigned char normalized; + + static unsigned int GetSizeOfType(unsigned int type) + { + switch (type) + { + case GL_FLOAT: return 4; + case GL_UNSIGNED_INT: return 4; + case GL_UNSIGNED_BYTE: return 1; + default: ASSERT(false); + return 0; + } + } +}; + +class VertexBufferLayout +{ +private: + std::vector m_Elements; + unsigned int m_Stride; +public: + VertexBufferLayout() + : m_Stride(0) + { + } + + template + void Push(unsigned int count) + { + std::cout << "SHould this be called? " << std::endl; + static_assert(false); + } + + template<> + void Push(unsigned int count) + { + m_Elements.push_back({GL_FLOAT, count, GL_FALSE}); + m_Stride += VertexBufferElement::GetSizeOfType(GL_FLOAT) * count; + } + + template<> + void Push(unsigned int count) + { + m_Elements.push_back({GL_UNSIGNED_INT, count, GL_FALSE}); + m_Stride += VertexBufferElement::GetSizeOfType(GL_UNSIGNED_INT) * count; + } + + template<> + void Push(unsigned int count) + { + m_Elements.push_back({GL_UNSIGNED_BYTE, count, GL_TRUE}); + m_Stride += VertexBufferElement::GetSizeOfType(GL_UNSIGNED_BYTE) * count; + } + + inline const std::vector GetElements() const { return m_Elements; } + inline unsigned int GetStride() const { return m_Stride; } +};