mirror of
https://github.com/bailwillharr/engine.git
synced 2024-09-21 04:51:18 +00:00
Do lots of stuff
This commit is contained in:
parent
a61367721c
commit
9d399c62d4
@ -32,7 +32,7 @@ add_library(${PROJECT_NAME} SHARED
|
|||||||
|
|
||||||
# PUBLIC API
|
# PUBLIC API
|
||||||
|
|
||||||
"include/export.h"
|
"include/engine_api.h"
|
||||||
|
|
||||||
"include/engine.hpp"
|
"include/engine.hpp"
|
||||||
|
|
||||||
@ -84,7 +84,15 @@ target_include_directories(${PROJECT_NAME} PRIVATE src)
|
|||||||
configure_file(config.h.in config.h)
|
configure_file(config.h.in config.h)
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
# libraries:
|
# project submodules:
|
||||||
|
|
||||||
|
add_subdirectory(graphics)
|
||||||
|
target_include_directories(${PROJECT_NAME} PUBLIC graphics/include)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PUBLIC graphics)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# external libraries:
|
||||||
|
|
||||||
# MinGW library if using it
|
# MinGW library if using it
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
|
17
TODO
Normal file
17
TODO
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Place all instances of a particular component in contiguous memory: I.e., a
|
||||||
|
scene holds many std::vectors, one for each type of component. These vectors are
|
||||||
|
looped through every frame. This should optimise things by improving the memory
|
||||||
|
layout of the program, significantly reducing cache misses.
|
||||||
|
|
||||||
|
At some point, add game controller support. Make sure it works well with the
|
||||||
|
'Input' class.
|
||||||
|
|
||||||
|
For mesh rendering, give every mesh-renderer a ShaderMaterial which, depending
|
||||||
|
on the shader, defines how the mesh reacts to light and also stores a reference
|
||||||
|
to its texture(s). -- Also make a model loader that works with multiple meshes
|
||||||
|
(by creating many objects).
|
||||||
|
|
||||||
|
Add support for shadows and other complex lighting. Also add post-processing.
|
||||||
|
|
||||||
|
For font rendering, put all ASCII characters in one large texture and use
|
||||||
|
'instancing' (and uniform buffer objects?) to reduce draw calls.
|
26
graphics/CMakeLists.txt
Normal file
26
graphics/CMakeLists.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.4)
|
||||||
|
|
||||||
|
# options
|
||||||
|
|
||||||
|
project(graphics LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} STATIC
|
||||||
|
|
||||||
|
"src/gfx_device.cpp"
|
||||||
|
|
||||||
|
# PUBLIC API
|
||||||
|
|
||||||
|
"include/gfx_api.h"
|
||||||
|
"include/gfx.hpp"
|
||||||
|
"include/gfx_device.hpp"
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
# compiling options:
|
||||||
|
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE DEFINITIONS "GFX_EXPORTS")
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME} PUBLIC include)
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
||||||
|
|
||||||
|
# libraries:
|
44
graphics/include/gfx.hpp
Normal file
44
graphics/include/gfx.hpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
|
||||||
|
enum class ShaderType {
|
||||||
|
VERTEX,
|
||||||
|
FRAGMENT,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Shader {
|
||||||
|
ShaderType type;
|
||||||
|
uint32_t handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef uint32_t Program;
|
||||||
|
|
||||||
|
enum class BufferType {
|
||||||
|
VERTEX,
|
||||||
|
INDEX,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Buffer {
|
||||||
|
BufferType type;
|
||||||
|
uint32_t handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class Primitive {
|
||||||
|
POINTS,
|
||||||
|
LINES,
|
||||||
|
LINE_STRIP,
|
||||||
|
TRIANGLES,
|
||||||
|
TRIANGLE_STRIP,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class IndexBufferFormat {
|
||||||
|
UNSIGNED_8_BITS,
|
||||||
|
UNSIGNED_16_BITS,
|
||||||
|
UNSIGNED_32_BITS,
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
13
graphics/include/gfx_api.h
Normal file
13
graphics/include/gfx_api.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef GFX_API
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# ifdef GFX_EXPORTS
|
||||||
|
# define GFX_API __declspec(dllexport)
|
||||||
|
# else
|
||||||
|
# define GFX_API __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define GFX_API
|
||||||
|
# endif
|
||||||
|
#endif
|
27
graphics/include/gfx_device.hpp
Normal file
27
graphics/include/gfx_device.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "gfx_api.h"
|
||||||
|
|
||||||
|
#include "gfx.hpp"
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
|
||||||
|
struct GFX_API Device {
|
||||||
|
|
||||||
|
virtual void setViewport(uint32_t top_left_x, uint32_t top_left_y, uint32_t width, uint32_t height) = 0;
|
||||||
|
|
||||||
|
virtual bool createShader(ShaderType type, const char* source, Shader& out) = 0;
|
||||||
|
virtual bool createProgram(int count, const Shader* shaders, Program& out) = 0;
|
||||||
|
|
||||||
|
virtual bool createBuffer(BufferType type, const void* data, Buffer& out) = 0;
|
||||||
|
virtual void bufferData(const void* data, Buffer buffer) = 0;
|
||||||
|
virtual void bufferSubData(uint32_t offset, uint32_t size, const void* data, Buffer buffer) = 0;
|
||||||
|
|
||||||
|
virtual void drawElements(Primitive primitive, IndexBufferFormat format, uint32_t count, uint32_t offset);
|
||||||
|
virtual void drawArrays() = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
7
graphics/src/gfx_device.cpp
Normal file
7
graphics/src/gfx_device.cpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "gfx_device.hpp"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "component.hpp"
|
#include "component.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
class Object;
|
class Object;
|
||||||
class Window;
|
class Window;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "component.hpp"
|
#include "component.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "component.hpp"
|
#include "component.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "component.hpp"
|
#include "component.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "inputs/mouse.hpp"
|
#include "inputs/mouse.hpp"
|
||||||
#include "inputs/keyboard.hpp"
|
#include "inputs/keyboard.hpp"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include <glm/mat4x4.hpp>
|
#include <glm/mat4x4.hpp>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "resources/resource.hpp"
|
#include "resources/resource.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "object.hpp"
|
#include "object.hpp"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include <glm/mat4x4.hpp>
|
#include <glm/mat4x4.hpp>
|
||||||
#include <glm/vec3.hpp>
|
#include <glm/vec3.hpp>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "export.h"
|
#include "engine_api.h"
|
||||||
|
|
||||||
#include "inputs/keyboard.hpp"
|
#include "inputs/keyboard.hpp"
|
||||||
#include "inputs/mouse.hpp"
|
#include "inputs/mouse.hpp"
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.4)
|
|
||||||
|
|
||||||
# options
|
|
||||||
|
|
||||||
project(
|
|
||||||
engine_renderer
|
|
||||||
LANGUAGES CXX
|
|
||||||
VERSION "0.1.0"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} SHARED
|
|
||||||
|
|
||||||
src/renderer.cpp
|
|
||||||
|
|
||||||
# API
|
|
||||||
|
|
||||||
include/renderer.hpp
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
# compiling options:
|
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE DEFINITIONS "PROJECT_EXPORTS")
|
|
||||||
|
|
||||||
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20)
|
|
||||||
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
if (MSVC)
|
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE /W3)
|
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE /MP)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC include)
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
|
||||||
|
|
||||||
# Pass some project information into the source code
|
|
||||||
configure_file(config.h.in config.h)
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
# libraries:
|
|
||||||
|
|
||||||
# MinGW library if using it
|
|
||||||
if (MINGW)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC mingw32)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# SDL2:
|
|
||||||
set(SDL2_DISABLE_INSTALL ON CACHE INTERNAL "" FORCE)
|
|
||||||
set(SDL_SHARED ON CACHE INTERNAL "" FORCE)
|
|
||||||
set(SDL_STATIC OFF CACHE INTERNAL "" FORCE)
|
|
||||||
set(SDL_TEST OFF CACHE INTERNAL "" FORCE)
|
|
||||||
set(BUILD_SHARED_LIBS ON)
|
|
||||||
add_subdirectory(dependencies/SDL)
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC dependencies/SDL/include)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2main)
|
|
||||||
|
|
||||||
# GLM:
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
add_subdirectory(dependencies/glm)
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC dependencies/glm)
|
|
||||||
|
|
||||||
# GLAD:
|
|
||||||
set(GLAD_PROFILE "core" CACHE INTERNAL "" FORCE)
|
|
||||||
set(GLAD_API "gl=3.3" CACHE INTERNAL "" FORCE)
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
set(GLAD_GENERATOR "c-debug" CACHE INTERNAL "" FORCE)
|
|
||||||
else()
|
|
||||||
set(GLAD_GENERATOR "c" CACHE INTERNAL "" FORCE)
|
|
||||||
endif()
|
|
||||||
set(GLAD_SPEC "gl" CACHE INTERNAL "" FORCE)
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
add_subdirectory(dependencies/glad)
|
|
||||||
set_property(TARGET glad PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC glad)
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC dependencies/glad/include)
|
|
||||||
|
|
||||||
# spdlog
|
|
||||||
set(SPDLOG_BUILD_SHARED ON CACHE INTERNAL "" FORCE)
|
|
||||||
set(BUILD_SHARED_LIBS ON)
|
|
||||||
add_subdirectory(dependencies/spdlog)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC spdlog)
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC dependencies/spdlog/include)
|
|
||||||
|
|
||||||
# freetype
|
|
||||||
set(FT_DISABLE_ZLIB TRUE CACHE INTERNAL "" FORCE)
|
|
||||||
set(FT_DISABLE_BZIP2 TRUE CACHE INTERNAL "" FORCE)
|
|
||||||
set(FT_DISABLE_PNG TRUE CACHE INTERNAL "" FORCE)
|
|
||||||
set(FT_DISABLE_HARFBUZZ TRUE CACHE INTERNAL "" FORCE)
|
|
||||||
set(FT_DISABLE_BROTLI TRUE CACHE INTERNAL "" FORCE)
|
|
||||||
set(BUILD_SHARED_LIBS ON)
|
|
||||||
add_subdirectory(dependencies/freetype)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE freetype)
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE dependencies/freetype/include)
|
|
||||||
|
|
||||||
# stb
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE dependencies/stb)
|
|
Loading…
Reference in New Issue
Block a user