Skip to content

Commit 9600d87

Browse files
committed
Tutorial 7 Cube
Tutorial 7 Cube
1 parent 3b5cfc8 commit 9600d87

42 files changed

Lines changed: 33971 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Tutorial1_Window/OpenGLGame.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
</PropertyGroup>
8383
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
8484
<LinkIncremental>false</LinkIncremental>
85+
<IncludePath>OGL3D/include/;OGL3D/source/;$(IncludePath)</IncludePath>
8586
</PropertyGroup>
8687
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
8788
<ClCompile>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#version 410 core
26+
27+
layout(location = 0) in vec3 vertOutColor;
28+
29+
30+
31+
32+
layout(location = 0) out vec4 outColor;
33+
34+
35+
void main()
36+
{
37+
outColor = vec4(1,1,1,1);
38+
outColor.rgb = vertOutColor;
39+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#version 410 core
26+
27+
layout (row_major) uniform UniformData
28+
{
29+
mat4 world;
30+
mat4 projection;
31+
};
32+
33+
34+
layout(location = 0) in vec3 position;
35+
layout(location = 1) in vec2 texcoord;
36+
37+
38+
layout(location = 0) out vec3 vertOutColor;
39+
40+
void main()
41+
{
42+
vec4 pos = vec4(position,1) * world;
43+
pos = pos * projection;
44+
45+
gl_Position = pos;
46+
vertOutColor = vec3(texcoord.x,texcoord.y,0);
47+
}

Tutorial7_Cube/Game/main.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#include <OGL3D/Game/OGame.h>
26+
#include <iostream>
27+
28+
int main()
29+
{
30+
try
31+
{
32+
OGame game;
33+
game.run();
34+
}
35+
catch (const std::exception& e)
36+
{
37+
std::wclog << e.what() << std::endl;
38+
return -1;
39+
}
40+
41+
return 0;
42+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <memory>
27+
#include <OGL3D/Graphics/OGraphicsEngine.h>
28+
#include <chrono>
29+
30+
31+
class OWindow;
32+
class OGame
33+
{
34+
public:
35+
OGame();
36+
~OGame();
37+
38+
virtual void onCreate();
39+
virtual void onUpdate();
40+
virtual void onQuit();
41+
42+
43+
void run();
44+
void quit();
45+
protected:
46+
bool m_isRunning = true;
47+
48+
//pay attention to the order of smart pointers
49+
//the first one defined (m_graphicsEngine) is the last to be deallocated
50+
//the last one defined (m_shader) is the first to be deallocated
51+
std::unique_ptr<OGraphicsEngine> m_graphicsEngine;
52+
std::unique_ptr<OWindow> m_display;
53+
54+
55+
OVertexArrayObjectPtr m_polygonVAO;
56+
OUniformBufferPtr m_uniform;
57+
OShaderProgramPtr m_shader;
58+
59+
std::chrono::system_clock::time_point m_previousTime;
60+
f32 m_scale = -3;
61+
};
62+
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
#include <OGL3D/Math/OVec4.h>
28+
#include <OGL3D/Math/ORect.h>
29+
30+
class OGraphicsEngine
31+
{
32+
public:
33+
OGraphicsEngine();
34+
~OGraphicsEngine();
35+
public:
36+
OVertexArrayObjectPtr createVertexArrayObject(const OVertexBufferDesc& vbDesc);
37+
OVertexArrayObjectPtr createVertexArrayObject(const OVertexBufferDesc& vbDesc, const OIndexBufferDesc& ibDesc);
38+
OUniformBufferPtr createUniformBuffer(const OUniformBufferDesc& desc);
39+
OShaderProgramPtr createShaderProgram(const OShaderProgramDesc& desc);
40+
public:
41+
void clear(const OVec4& color);
42+
void setFaceCulling(const OCullType& type);
43+
void setWindingOrder(const OWindingOrder& order);
44+
void setViewport(const ORect& size);
45+
void setVertexArrayObject(const OVertexArrayObjectPtr& vao);
46+
void setUniformBuffer(const OUniformBufferPtr& buffer, ui32 slot);
47+
void setShaderProgram(const OShaderProgramPtr& program);
48+
void drawTriangles(const OTriangleType& triangleType, ui32 vertexCount, ui32 offset);
49+
void drawIndexedTriangles(const OTriangleType& triangleType, ui32 indicesCount);
50+
};
51+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
29+
30+
class OShaderProgram
31+
{
32+
public:
33+
OShaderProgram(const OShaderProgramDesc& desc);
34+
~OShaderProgram();
35+
ui32 getId();
36+
void setUniformBufferSlot(const char* name, ui32 slot);
37+
private:
38+
void attach(const wchar_t* shaderFilePath, const OShaderType& type);
39+
void link();
40+
private:
41+
ui32 m_programId = 0;
42+
ui32 m_attachedShaders[2] = {};
43+
};
44+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
class OUniformBuffer
29+
{
30+
public:
31+
OUniformBuffer(const OUniformBufferDesc& desc);
32+
~OUniformBuffer();
33+
34+
void setData(void* data);
35+
36+
ui32 getId();
37+
private:
38+
ui32 m_id = 0;
39+
ui32 m_size = 0;
40+
};
41+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*MIT License
2+
3+
C++ OpenGL 3D Game Tutorial Series (https://github.com/PardCode/OpenGL-3D-Game-Tutorial-Series)
4+
5+
Copyright (c) 2021-2022, PardCode
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.*/
24+
25+
#pragma once
26+
#include <OGL3D/OPrerequisites.h>
27+
28+
29+
class OVertexArrayObject
30+
{
31+
public:
32+
OVertexArrayObject(const OVertexBufferDesc& vbDesc);
33+
OVertexArrayObject(const OVertexBufferDesc& vbDesc, const OIndexBufferDesc& ibDesc);
34+
~OVertexArrayObject();
35+
36+
ui32 getId();
37+
38+
ui32 getVertexBufferSize();
39+
ui32 getVertexSize();
40+
private:
41+
ui32 m_vertexBufferId = 0;
42+
ui32 m_elementBufferId = 0;
43+
ui32 m_vertexArrayObjectId = 0;
44+
OVertexBufferDesc m_vertexBufferData;
45+
};
46+

0 commit comments

Comments
 (0)