Skip to content

Commit d23e97d

Browse files
committed
Tutorial 4
Tutorial 4
1 parent 6740557 commit d23e97d

36 files changed

Lines changed: 33369 additions & 0 deletions
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 inColor;
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 = inColor;
39+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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 position;
28+
layout(location = 1) in vec3 color;
29+
30+
31+
layout(location = 0) out vec3 outColor;
32+
33+
void main()
34+
{
35+
gl_Position.xyz = position;
36+
37+
//if (gl_Position.y>0 && gl_Position.y<1)
38+
// gl_Position.x += 0.5;
39+
40+
gl_Position.w = 1.0;
41+
42+
outColor = color;
43+
}

Tutorial4_Shaders/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: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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+
class OWindow;
29+
class OGame
30+
{
31+
public:
32+
OGame();
33+
~OGame();
34+
35+
virtual void onCreate();
36+
virtual void onUpdate();
37+
virtual void onQuit();
38+
39+
40+
void run();
41+
void quit();
42+
protected:
43+
bool m_isRunning = true;
44+
45+
//pay attention to the order of smart pointers
46+
//the first one defined (m_graphicsEngine) is the last to be deallocated
47+
//the last one defined (m_triangleVAO) is the first to be deallocated
48+
std::unique_ptr<OGraphicsEngine> m_graphicsEngine;
49+
std::unique_ptr<OWindow> m_display;
50+
51+
52+
OVertexArrayObjectPtr m_triangleVAO;
53+
OShaderProgramPtr m_shader;
54+
};
55+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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& data);
37+
OShaderProgramPtr createShaderProgram(const OShaderProgramDesc& desc);
38+
public:
39+
void clear(const OVec4& color);
40+
void setViewport(const ORect& size);
41+
void setVertexArrayObject(const OVertexArrayObjectPtr& vao);
42+
void setShaderProgram(const OShaderProgramPtr& program);
43+
void drawTriangles(ui32 vertexCount, ui32 offset);
44+
};
45+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
private:
37+
void attach(const wchar_t* shaderFilePath, const OShaderType& type);
38+
void link();
39+
private:
40+
ui32 m_programId = 0;
41+
ui32 m_attachedShaders[2] = {};
42+
};
43+
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+
class OVertexArrayObject
30+
{
31+
public:
32+
OVertexArrayObject(const OVertexBufferDesc& data);
33+
~OVertexArrayObject();
34+
35+
ui32 getId();
36+
37+
ui32 getVertexBufferSize();
38+
ui32 getVertexSize();
39+
private:
40+
ui32 m_vertexBufferId = 0;
41+
ui32 m_vertexArrayObjectId = 0;
42+
OVertexBufferDesc m_vertexBufferData;
43+
};
44+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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 ORect
29+
{
30+
public:
31+
ORect(){}
32+
ORect(i32 width, i32 height):width(width),height(height) {}
33+
ORect(i32 left, i32 top, i32 width, i32 height) :left(left),top(top),width(width), height(height) {}
34+
ORect(const ORect& rect) :left(rect.left), top(rect.top), width(rect.width), height(rect.height) {}
35+
public:
36+
i32 width = 0, height = 0, left = 0, top = 0;
37+
};

0 commit comments

Comments
 (0)