1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-09 17:30:43 +00:00

We now have a blank window again.

This commit is contained in:
Tim Sarbin 2019-02-20 23:14:27 -05:00
parent 7fb694d59a
commit 0f601cb024
15 changed files with 211 additions and 46 deletions

6
.gitmodules vendored
View File

@ -1,6 +1,6 @@
[submodule "3rdparty/bgfx"]
path = 3rdparty/bgfx
url = git@github.com:JoshuaBrookover/bgfx.cmake.git
[submodule "3rdparty/glfw"]
path = 3rdparty/glfw
url = git@github.com:glfw/glfw.git
[submodule "3rdparty/spdlog"]
path = 3rdparty/spdlog
url = git@github.com:gabime/spdlog.git

4
3rdparty/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,4 @@
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(glfw)

1
3rdparty/bgfx vendored

@ -1 +0,0 @@
Subproject commit 95cb070eb2101d42327fa040c50d9703612b09f4

1
3rdparty/spdlog vendored Submodule

@ -0,0 +1 @@
Subproject commit bdfc7d2a5a4ad9cc1cebe1feb7e6fcc703840d71

View File

@ -1,7 +1,21 @@
cmake_minimum_required(VERSION 3.13)
project(OpenDiablo2)
cmake_minimum_required(VERSION 3.0)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "Do not build in-source. Please remove CMakeCache.txt and the CMakeFiles/ directory. Then build out-of-source.")
endif()
project(OpenDiablo2 CXX)
include(CTest)
include(CMakeDependentOption)
set(CMAKE_CXX_STANDARD 17)
set(OpenGL_GL_PREFERENCE "GLVND")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
add_subdirectory(3rdparty)
add_subdirectory(OpenDiablo2.Game)
add_subdirectory(OpenDiablo2.OS)
add_subdirectory(OpenDiablo2.Graphics)
add_subdirectory(OpenDiablo2.Game)

View File

@ -1,4 +1,25 @@
add_executable(OpenDiablo2 src/main.cpp)
include_directories(OpenDiablo2 ../OpenDiablo2.OS/include)
target_link_libraries(OpenDiablo2 OpenDiablo2.OS)
add_executable(OpenDiablo2
src/main.cpp
src/D2Engine.cpp
)
include_directories(OpenDiablo2
include
../OpenDiablo2.OS/include
../OpenDiablo2.Graphics/include
../3rdparty/spdlog/include
)
target_link_libraries(OpenDiablo2
PUBLIC
OpenDiablo2.OS
OpenDiablo2.Graphics
)
target_compile_features(OpenDiablo2 PRIVATE cxx_std_17)
if(MSVC)
target_compile_options(OpenDiablo2 PRIVATE /W4 /WX)
else(MSVC)
target_compile_options(OpenDiablo2 PRIVATE -Wall -Wextra -pedantic -Werror)
endif(MSVC)

View File

@ -0,0 +1,21 @@
#ifndef OPENDIABLO2_D2ENGINE_H
#define OPENDIABLO2_D2ENGINE_H
#include <OpenDiablo2.OS/D2Window.h>
#include <OpenDiablo2.Graphics/D2Graphics.h>
namespace OpenDiablo2 {
namespace Game {
class D2Engine {
public:
D2Engine();
void Run();
private:
OpenDiablo2::OS::D2WindowPtr window;
OpenDiablo2::Graphics::D2GraphicsPtr gfx;
};
}
}
#endif //OPENDIABLO2_D2ENGINE_H

View File

@ -0,0 +1,21 @@
#include <OpenDiablo2.Game/D2Engine.h>
OpenDiablo2::Game::D2Engine::D2Engine() {
window = std::make_unique<OpenDiablo2::OS::D2Window>();
gfx = std::make_unique<OpenDiablo2::Graphics::D2Graphics>();
}
void
OpenDiablo2::Game::D2Engine::Run() {
window->Initialize();
while (window->WindowStillOpen()) {
window->PollEvents();
gfx->Clear();
window->FlipBuffer();
}
window->Finalize();
}

View File

@ -1,10 +1,18 @@
#include <memory>
#include <D2Window.h>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <OpenDiablo2.Game/D2Engine.h>
int
main() {
auto window = std::make_unique<OpenDiablo2::OS::D2Window>();
window->Run();
spdlog::set_level(spdlog::level::trace);
spdlog::set_pattern("[%^%l%$] %v");
spdlog::info("OpenDiablo 2 has started");
auto engine = std::make_unique<OpenDiablo2::Game::D2Engine>();
engine->Run();
return 0;
}

View File

@ -0,0 +1,23 @@
project(libOpenDiablo2.Graphics VERSION 0.1 LANGUAGES CXX)
find_package(OpenGL)
include_directories(
include
../3rdparty/bgfx/include
../3rdparty/spdlog/include
${OPENGL_INCLUDE_DIRS}
)
add_library(OpenDiablo2.Graphics SHARED
src/D2Graphics.cpp
)
target_link_libraries(OpenDiablo2.Graphics ${OPENGL_LIBRARIES})
if(MSVC)
target_compile_options(OpenDiablo2.Graphics PRIVATE /W4 /WX)
else(MSVC)
target_compile_options(OpenDiablo2.Graphics PRIVATE -Wall -Wextra -pedantic -Werror)
endif(MSVC)

View File

@ -0,0 +1,21 @@
#ifndef OPENDIABLO2_D2GRAPHICS_H
#define OPENDIABLO2_D2GRAPHICS_H
#include <memory>
namespace OpenDiablo2 {
namespace Graphics {
class D2Graphics {
public:
D2Graphics();
void Clear();
private:
};
typedef std::unique_ptr<D2Graphics> D2GraphicsPtr;
}
}
#endif //OPENDIABLO2_D2GRAPHICS_H

View File

@ -0,0 +1,18 @@
#include <OpenDiablo2.Graphics/D2Graphics.h>
#include <GL/gl.h>
#include "OpenDiablo2.Graphics/D2Graphics.h"
namespace OpenDiablo2 {
namespace Graphics {
D2Graphics::D2Graphics() = default;
void
D2Graphics::Clear() {
glClear(GL_COLOR_BUFFER_BIT);
}
}
}

View File

@ -1,19 +1,19 @@
project(libOpenDiablo2.OS VERSION 0.1 LANGUAGES CXX)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(../3rdparty/glfw build)
include_directories(
include
../3rdparty/glfw/include
../3rdparty/spdlog/include
)
add_library(OpenDiablo2.OS
add_library(OpenDiablo2.OS SHARED
src/D2Window.cpp
)
target_link_libraries(OpenDiablo2.OS
glfw
)
target_link_libraries(OpenDiablo2.OS glfw)
if(MSVC)
target_compile_options(OpenDiablo2.OS PRIVATE /W4 /WX)
else(MSVC)
target_compile_options(OpenDiablo2.OS PRIVATE -Wall -Wextra -pedantic -Werror)
endif(MSVC)

View File

@ -2,23 +2,22 @@
#define OPENDIABLO2_WINDOW_H
#include <memory>
#include <GLFW/glfw3.h>
class GLFWwindow;
namespace OpenDiablo2 { namespace OS {
class D2Window {
public:
D2Window();
void Run();
void Initialize();
void Finalize();
bool WindowStillOpen();
void FlipBuffer();
void PollEvents();
private:
GLFWwindow* glfwWindow;
void
InitializeWindow();
void
FinalizeWindow();
};
typedef std::unique_ptr<D2Window> D2WindowPtr;

View File

@ -1,37 +1,52 @@
#include <D2Window.h>
#define GLFW_INCLUDE_NONE
#include <OpenDiablo2.OS/D2Window.h>
#include <spdlog/spdlog.h>
#include <GLFW/glfw3.h>
namespace OpenDiablo2 {
namespace OS {
D2Window::D2Window() {
}
D2Window::D2Window() = default;
void
D2Window::Run() {
InitializeWindow();
while (!glfwWindowShouldClose(glfwWindow)) {
glfwPollEvents();
}
FinalizeWindow();
}
D2Window::Initialize() {
spdlog::debug("Initializing D2Window");
void
D2Window::InitializeWindow() {
spdlog::debug("Initializing GLFW");
if (!glfwInit()) {
spdlog::error("Initializing D2Window");
throw std::runtime_error(
"GLFW could not initialize the host window.");
}
spdlog::debug("Creating GLFW window");
glfwWindowHint(GLFW_RESIZABLE, 0);
glfwWindow = glfwCreateWindow(800, 600, "OpenDiablo 2", NULL, NULL);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindow = glfwCreateWindow(800, 600, "OpenDiablo 2", nullptr, nullptr);
}
void
D2Window::FinalizeWindow() {
D2Window::Finalize() {
spdlog::debug("Destroying GLFW window");
glfwDestroyWindow(glfwWindow);
spdlog::debug("Terminating GLFW");
glfwTerminate();
}
bool
D2Window::WindowStillOpen() {
return !glfwWindowShouldClose(glfwWindow);
}
void
D2Window::PollEvents() {
glfwPollEvents();
}
void
D2Window::FlipBuffer() {
glfwSwapBuffers(glfwWindow);
}
}
}