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
|
||||
|
||||
"include/export.h"
|
||||
"include/engine_api.h"
|
||||
|
||||
"include/engine.hpp"
|
||||
|
||||
@ -84,7 +84,15 @@ target_include_directories(${PROJECT_NAME} PRIVATE src)
|
||||
configure_file(config.h.in config.h)
|
||||
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
|
||||
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
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "component.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
class Object;
|
||||
class Window;
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "component.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "component.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "component.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "inputs/mouse.hpp"
|
||||
#include "inputs/keyboard.hpp"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include <glm/mat4x4.hpp>
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "resources/resource.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "resource.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "resource.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include <string>
|
||||
#include <filesystem>
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "resource.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "resource.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "object.hpp"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include <glm/mat4x4.hpp>
|
||||
#include <glm/vec3.hpp>
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "export.h"
|
||||
#include "engine_api.h"
|
||||
|
||||
#include "inputs/keyboard.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