Do lots of stuff

This commit is contained in:
Bailey Harrison 2022-09-07 10:02:01 +01:00
parent a61367721c
commit 9d399c62d4
25 changed files with 160 additions and 115 deletions

View File

@ -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
View 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
View 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
View 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,
};
}

View 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

View 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;
};
}

View File

@ -0,0 +1,7 @@
#include "gfx_device.hpp"
#include <stdio.h>
namespace gfx {
}

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "component.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
class Object;
class Window;

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "component.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "component.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "component.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "inputs/mouse.hpp"
#include "inputs/keyboard.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include <glm/mat4x4.hpp>

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "resources/resource.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "resource.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "resource.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include <string>
#include <filesystem>

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "resource.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "resource.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "object.hpp"

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include <glm/mat4x4.hpp>
#include <glm/vec3.hpp>

View File

@ -1,6 +1,6 @@
#pragma once
#include "export.h"
#include "engine_api.h"
#include "inputs/keyboard.hpp"
#include "inputs/mouse.hpp"

View File

@ -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)