From 0ddfaead8f7a79ed06dde48faeb27f4359800284 Mon Sep 17 00:00:00 2001 From: viperscape Date: Thu, 15 Nov 2018 17:02:20 -0500 Subject: [PATCH] add basic example --- examples/basic/.gitignore | 7 + examples/basic/basic/basic.sln | 31 ++++ examples/basic/basic/basic.vcxproj | 159 +++++++++++++++++++++ examples/basic/basic/basic.vcxproj.filters | 39 +++++ examples/basic/basic/basic.vcxproj.user | 4 + examples/basic/basic/packages.config | 6 + examples/basic/main.cpp | Bin 0 -> 19314 bytes examples/basic/shaders.cpp | 114 +++++++++++++++ examples/basic/shaders.h | 13 ++ examples/basic/window.cpp | 27 ++++ examples/basic/window.h | 15 ++ 11 files changed, 415 insertions(+) create mode 100644 examples/basic/.gitignore create mode 100644 examples/basic/basic/basic.sln create mode 100644 examples/basic/basic/basic.vcxproj create mode 100644 examples/basic/basic/basic.vcxproj.filters create mode 100644 examples/basic/basic/basic.vcxproj.user create mode 100644 examples/basic/basic/packages.config create mode 100644 examples/basic/main.cpp create mode 100644 examples/basic/shaders.cpp create mode 100644 examples/basic/shaders.h create mode 100644 examples/basic/window.cpp create mode 100644 examples/basic/window.h diff --git a/examples/basic/.gitignore b/examples/basic/.gitignore new file mode 100644 index 0000000..0d208f4 --- /dev/null +++ b/examples/basic/.gitignore @@ -0,0 +1,7 @@ +.vs +Debug +x64 +packages + +!*.sln +!*.vcxproj* \ No newline at end of file diff --git a/examples/basic/basic/basic.sln b/examples/basic/basic/basic.sln new file mode 100644 index 0000000..009bd2d --- /dev/null +++ b/examples/basic/basic/basic.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2050 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic", "basic.vcxproj", "{0589AC44-0CF3-40D8-8D89-68393CFD40F3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Debug|x64.ActiveCfg = Debug|x64 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Debug|x64.Build.0 = Debug|x64 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Debug|x86.ActiveCfg = Debug|Win32 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Debug|x86.Build.0 = Debug|Win32 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Release|x64.ActiveCfg = Release|x64 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Release|x64.Build.0 = Release|x64 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Release|x86.ActiveCfg = Release|Win32 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {055E97C4-43DC-41B4-8D61-4FDDBC7B1EF7} + EndGlobalSection +EndGlobal diff --git a/examples/basic/basic/basic.vcxproj b/examples/basic/basic/basic.vcxproj new file mode 100644 index 0000000..3aa245a --- /dev/null +++ b/examples/basic/basic/basic.vcxproj @@ -0,0 +1,159 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {0589AC44-0CF3-40D8-8D89-68393CFD40F3} + basic + 10.0.17134.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + _MBCS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);opengl32.lib + Console + + + + + Level3 + Disabled + true + true + _MBCS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);opengl32.lib + Console + + + + + Level3 + MaxSpeed + true + true + true + true + _MBCS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + + + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);opengl32.lib + Console + + + + + Level3 + MaxSpeed + true + true + true + true + _MBCS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + + + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);opengl32.lib + Console + + + + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/examples/basic/basic/basic.vcxproj.filters b/examples/basic/basic/basic.vcxproj.filters new file mode 100644 index 0000000..92e206f --- /dev/null +++ b/examples/basic/basic/basic.vcxproj.filters @@ -0,0 +1,39 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/examples/basic/basic/basic.vcxproj.user b/examples/basic/basic/basic.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/examples/basic/basic/basic.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/basic/basic/packages.config b/examples/basic/basic/packages.config new file mode 100644 index 0000000..85cebfe --- /dev/null +++ b/examples/basic/basic/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/basic/main.cpp b/examples/basic/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..365b616dacf45eb9e5db53c1c847934676f6a6f0 GIT binary patch literal 19314 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 +#include + + +#include +#include + +std::string FragmentShaderCode = +"#version 330 core\n\ +in vec3 normal;\n\ +in vec3 position;\n\ +in vec2 texcoord;\n\ +\n\ +uniform sampler2D tex;\n\ +uniform vec3 sun_position; \n\ +uniform vec3 sun_color; \n\ +\n\ +out vec4 color;\n\ +void main() {\n\ + float lum = max(dot(normal, normalize(sun_position)), 0.0);\n\ + color = texture2D(tex, texcoord) * vec4((0.3 + 0.7 * lum) * sun_color, 1.0);\n\ +}\n\ +"; + +std::string VertexShaderCode = +"#version 330 core\n\ +layout(location = 0) in vec3 in_vertex;\n\ +layout(location = 1) in vec3 in_normal;\n\ +layout(location = 2) in vec2 in_texcoord;\n\ +\n\ +uniform mat4 MVP;\n\ +\n\ +out vec3 normal;\n\ +out vec3 position;\n\ +out vec2 texcoord;\n\ +\n\ +void main(){\n\ + gl_Position = MVP * vec4(in_vertex, 1);\n\ + position = gl_Position.xyz;\n\ + normal = normalize(mat3(MVP) * in_normal);\n\ + position = in_vertex;\n\ + texcoord = in_texcoord;\n\ +}"; + + +Shaders::Shaders() +{ + + // Create the shaders + GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER); + GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); + + + GLint Result = GL_FALSE; + int InfoLogLength; + + // Compile Vertex Shader + char const * VertexSourcePointer = VertexShaderCode.c_str(); + glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL); + glCompileShader(VertexShaderID); + + // Check Vertex Shader + glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); + glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); + if (InfoLogLength > 0) { + std::vector VertexShaderErrorMessage(InfoLogLength + 1); + glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]); + printf("%s\n", &VertexShaderErrorMessage[0]); + } + + // Compile Fragment Shader + char const * FragmentSourcePointer = FragmentShaderCode.c_str(); + glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL); + glCompileShader(FragmentShaderID); + + // Check Fragment Shader + glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); + glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); + if (InfoLogLength > 0) { + std::vector FragmentShaderErrorMessage(InfoLogLength + 1); + glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]); + printf("%s\n", &FragmentShaderErrorMessage[0]); + } + + // Link the program + printf("Linking program\n"); + GLuint ProgramID = glCreateProgram(); + glAttachShader(ProgramID, VertexShaderID); + glAttachShader(ProgramID, FragmentShaderID); + glLinkProgram(ProgramID); + + // Check the program + glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); + glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); + if (InfoLogLength > 0) { + std::vector ProgramErrorMessage(InfoLogLength + 1); + glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); + printf("%s\n", &ProgramErrorMessage[0]); + } + + glDetachShader(ProgramID, VertexShaderID); + glDetachShader(ProgramID, FragmentShaderID); + + glDeleteShader(VertexShaderID); + glDeleteShader(FragmentShaderID); + + this->pid = ProgramID; +} + + +Shaders::~Shaders() +{ +} diff --git a/examples/basic/shaders.h b/examples/basic/shaders.h new file mode 100644 index 0000000..1fb2823 --- /dev/null +++ b/examples/basic/shaders.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +class Shaders +{ +public: + GLuint pid; + Shaders(); + ~Shaders(); +}; + diff --git a/examples/basic/window.cpp b/examples/basic/window.cpp new file mode 100644 index 0000000..c51e434 --- /dev/null +++ b/examples/basic/window.cpp @@ -0,0 +1,27 @@ +#include "window.h" + + + +Window::Window(int x, int y, const char* title) +{ + GLFWwindow* window = glfwCreateWindow(x, y, title, NULL, NULL); + this->window = window; +} + + +Window::~Window() +{ + glfwDestroyWindow(this->window); +} + +void Window::Resize() +{ + GLint w, h; + glfwGetWindowSize(this->window, &w, &h); + glViewport(0, 0, w, h); +} + +int Window::Close() +{ + return glfwWindowShouldClose(this->window); +} diff --git a/examples/basic/window.h b/examples/basic/window.h new file mode 100644 index 0000000..3790c65 --- /dev/null +++ b/examples/basic/window.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +class Window +{ +public: + GLFWwindow* window; + + Window(int x, int y, const char* title); + ~Window(); + void Resize(); + int Close(); +}; +