From 8f2e981e91676eb312d43ac86dec8fcf4c7d48b8 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Thu, 20 Feb 2014 18:10:59 +0100 Subject: [PATCH] Bootstrapped OpenGL --- Escape-the-Dawn.sln | 6 -- Escape-the-Dawn/Escape-the-Dawn.vcxproj | 18 ++++- .../Escape-the-Dawn.vcxproj.filters | 8 ++ Escape-the-Dawn/glerror.h | 25 ++++++ Escape-the-Dawn/logging.h | 81 +++++++++++++++++++ Escape-the-Dawn/main.cpp | 56 +++++++++++++ 6 files changed, 184 insertions(+), 10 deletions(-) create mode 100644 Escape-the-Dawn/glerror.h create mode 100644 Escape-the-Dawn/logging.h diff --git a/Escape-the-Dawn.sln b/Escape-the-Dawn.sln index 9702c5a..a932c57 100644 --- a/Escape-the-Dawn.sln +++ b/Escape-the-Dawn.sln @@ -6,19 +6,13 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 - MinSizeRel|Win32 = MinSizeRel|Win32 Release|Win32 = Release|Win32 - RelWithDebInfo|Win32 = RelWithDebInfo|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FE405CFA-8FCE-4867-92CF-797E73B36482}.Debug|Win32.ActiveCfg = Debug|Win32 {FE405CFA-8FCE-4867-92CF-797E73B36482}.Debug|Win32.Build.0 = Debug|Win32 - {FE405CFA-8FCE-4867-92CF-797E73B36482}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {FE405CFA-8FCE-4867-92CF-797E73B36482}.MinSizeRel|Win32.Build.0 = Release|Win32 {FE405CFA-8FCE-4867-92CF-797E73B36482}.Release|Win32.ActiveCfg = Release|Win32 {FE405CFA-8FCE-4867-92CF-797E73B36482}.Release|Win32.Build.0 = Release|Win32 - {FE405CFA-8FCE-4867-92CF-797E73B36482}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {FE405CFA-8FCE-4867-92CF-797E73B36482}.RelWithDebInfo|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj b/Escape-the-Dawn/Escape-the-Dawn.vcxproj index 8e7f207..74faf25 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj @@ -39,25 +39,28 @@ - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) + $(SolutionDir)\Libraries;$(SolutionDir)\Libraries\glew-1.10.0\include;$(SolutionDir)\Libraries\glfw-3.0.4\include;$(SolutionDir)\Libraries\glm-0.9.5.2;$(IncludePath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) + $(SolutionDir)\Libraries\glew-1.10.0\lib\Debug\Win32;$(SolutionDir)\Libraries\glfw-3.0.4\lib\Debug;$(LibraryPath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) + $(SolutionDir)\Libraries;$(SolutionDir)\Libraries\glew-1.10.0\include;$(SolutionDir)\Libraries\glfw-3.0.4\include;$(SolutionDir)\Libraries\glm-0.9.5.2;$(IncludePath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) + $(SolutionDir)\Libraries\glew-1.10.0\lib\Release\Win32;$(SolutionDir)\Libraries\glfw-3.0.4\lib\Release;$(LibraryPath) Level3 Disabled + GLEW_STATIC;DEBUG;%(PreprocessorDefinitions) + NotUsing true Console + opengl32.lib;glu32.lib;glew32sd.lib;glfw3.lib;%(AdditionalDependencies) @@ -66,16 +69,23 @@ MaxSpeed true true + GLEW_STATIC;%(PreprocessorDefinitions) + NotUsing true true true + opengl32.lib;glu32.lib;glew32s.lib;glfw3.lib;%(AdditionalDependencies) + + + + diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters index 8755a3a..bad452f 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters @@ -19,4 +19,12 @@ Source Files + + + Header Files + + + Header Files + + \ No newline at end of file diff --git a/Escape-the-Dawn/glerror.h b/Escape-the-Dawn/glerror.h new file mode 100644 index 0000000..88f58a7 --- /dev/null +++ b/Escape-the-Dawn/glerror.h @@ -0,0 +1,25 @@ +#ifndef _GLERROR_H +#define _GLERROR_H + +#define GLFW_INCLUDE_GLU +#include +#include + +#include "logging.h" + +inline bool _GLERROR(char* info, char* file, char* func, unsigned int line) +{ + GLenum error = glGetError(); + if (error != GL_NO_ERROR) + { + _LOG(LOG_LEVEL_ERROR, file, func, line, "GL Error: %s %i %s", info, error, gluErrorString(error)); + return true; + } + + return false; +} + +#define GLERROR(function) \ + _GLERROR(function, __BASE_FILE__, __func__, __LINE__) + +#endif \ No newline at end of file diff --git a/Escape-the-Dawn/logging.h b/Escape-the-Dawn/logging.h new file mode 100644 index 0000000..e2a7b7f --- /dev/null +++ b/Escape-the-Dawn/logging.h @@ -0,0 +1,81 @@ +#ifndef DEBUG_H +#define DEBUG_H + +#ifdef _WIN32 +// http://stackoverflow.com/a/2282433 +#define __func__ __FUNCTION__ +// http://stackoverflow.com/a/8488201 +#define __BASE_FILE__ \ + (strrchr(__FILE__, '/') \ + ? strrchr(__FILE__, '/') + 1 \ + : (strrchr(__FILE__, '\\') \ + ? strrchr(__FILE__, '\\') + 1 \ + : __FILE__)) +#endif + +#include +#include +#include +#include +#include + +enum _LOG_LEVEL +{ + LOG_LEVEL_ERROR, + LOG_LEVEL_WARNING, + LOG_LEVEL_INFO, + LOG_LEVEL_DEBUG +}; + +#ifdef DEBUG +static _LOG_LEVEL LOG_LEVEL = LOG_LEVEL_DEBUG; +#else +static _LOG_LEVEL LOG_LEVEL = LOG_LEVEL_INFO; +#endif + +const static char* _LOG_LEVEL_PREFIX[] = +{ + "E: ", + "W: ", + "", + "D: " +}; + +static void _LOG(_LOG_LEVEL logLevel, char* file, char* func, unsigned int line, const char* format, ...) +{ + if (logLevel > LOG_LEVEL) + return; + + char message[512]; + va_list args; + va_start(args, format); + vsnprintf(message, 512, format, args); + va_end(args); + + if (logLevel == LOG_LEVEL_ERROR) + { + std::cerr << file << ":" << line << " " << func << std::endl; + std::cerr << _LOG_LEVEL_PREFIX[logLevel] << message << std::endl; + } + else + { + std::cout << _LOG_LEVEL_PREFIX[logLevel] << message << std::endl; + } +} + +#define LOG(logLevel, format, ...) \ + _LOG(logLevel, __BASE_FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + +#define LOG_ERROR(format, ...) \ + LOG(LOG_LEVEL_ERROR, format, ##__VA_ARGS__) + +#define LOG_WARNING(format, ...) \ + LOG(LOG_LEVEL_WARNING, format, ##__VA_ARGS__) + +#define LOG_INFO(format, ...) \ + LOG(LOG_LEVEL_INFO, format, ##__VA_ARGS__) + +#define LOG_DEBUG(format, ...) \ + LOG(LOG_LEVEL_DEBUG, format, ##__VA_ARGS__) + +#endif \ No newline at end of file diff --git a/Escape-the-Dawn/main.cpp b/Escape-the-Dawn/main.cpp index d2edf5e..e67053c 100644 --- a/Escape-the-Dawn/main.cpp +++ b/Escape-the-Dawn/main.cpp @@ -1,4 +1,60 @@ +#include +#include + +#include +#define GLFW_INCLUDE_GLU +#include +#include + +#include "logging.h" +#include "glerror.h" + +GLFWwindow* window; +GLint glVersion[2]; +GLchar* glVendor; + int main(int argc, char* argv[]) { + // Initialize GLFW + if (!glfwInit()) + { + LOG_ERROR("GLFW: Initialization failed"); + return 1; + } + + // Create a window + window = glfwCreateWindow(1280, 720, "OpenGL", nullptr, nullptr); + if (!window) + { + LOG_ERROR("GLFW: Failed to create window"); + return 1; + } + glfwMakeContextCurrent(window); + + // GL version info + glGetIntegerv(GL_MAJOR_VERSION, &glVersion[0]); + glGetIntegerv(GL_MINOR_VERSION, &glVersion[1]); + glVendor = (GLchar*)glGetString(GL_VENDOR); + std::stringstream ss; + ss << glVendor << " OpenGL " << glVersion[0] << "." << glVersion[1]; +#ifdef DEBUG + ss << " DEBUG"; +#endif + LOG_INFO(ss.str().c_str()); + glfwSetWindowTitle(window, ss.str().c_str()); + + // Initialize GLEW + if (glewInit() != GLEW_OK) + { + LOG_ERROR("GLEW: Initialization failed"); + return 1; + } + + // Main loop + while (!glfwWindowShouldClose(window)) + { + glfwPollEvents(); + } + return 0; } \ No newline at end of file