repo: initialize and link with necessary libraries
This commit is contained in:
commit
61faff439b
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
thirdparty/*/
|
||||||
|
build/
|
||||||
|
.cache/
|
15
.gitmodules
vendored
Normal file
15
.gitmodules
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[submodule "thirdparty/bgfx.cmake"]
|
||||||
|
path = thirdparty/bgfx.cmake
|
||||||
|
url = https://github.com/bkaradzic/bgfx.cmake
|
||||||
|
[submodule "thirdparty/imgui.cmake"]
|
||||||
|
path = thirdparty/imgui.cmake
|
||||||
|
url = https://github.com/tamaskenez/imgui-cmake
|
||||||
|
[submodule "thirdparty/glfw.cmake"]
|
||||||
|
path = thirdparty/glfw.cmake
|
||||||
|
url = https://github.com/glfw/glfw
|
||||||
|
[submodule "thirdparty/assimp.cmake"]
|
||||||
|
path = thirdparty/assimp.cmake
|
||||||
|
url = https://github.com/assimp/assimp
|
||||||
|
[submodule "thirdparty/glm.cmake"]
|
||||||
|
path = thirdparty/glm.cmake
|
||||||
|
url = https://github.com/icaven/glm
|
52
CMakeLists.txt
Normal file
52
CMakeLists.txt
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
cmake_minimum_required(VERSION 3.30.0)
|
||||||
|
project(eo
|
||||||
|
VERSION 0.1
|
||||||
|
DESCRIPTION "Report to Houston"
|
||||||
|
HOMEPAGE_URL "http://git.0xdeadbeer.xyz/0xdeadbeer/eo"
|
||||||
|
LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_subdirectory("thirdparty/bgfx.cmake")
|
||||||
|
add_subdirectory("thirdparty/glfw.cmake")
|
||||||
|
add_subdirectory("thirdparty/imgui.cmake")
|
||||||
|
add_subdirectory("thirdparty/assimp.cmake")
|
||||||
|
add_subdirectory("thirdparty/glm.cmake")
|
||||||
|
add_executable(eo src/eo.cpp)
|
||||||
|
target_link_libraries(eo bx)
|
||||||
|
target_link_libraries(eo bgfx)
|
||||||
|
target_link_libraries(eo bimg)
|
||||||
|
target_link_libraries(eo glfw)
|
||||||
|
target_link_libraries(eo imgui)
|
||||||
|
target_link_libraries(eo assimp)
|
||||||
|
target_link_libraries(eo glm)
|
||||||
|
|
||||||
|
# build shaders into /build/shaders/
|
||||||
|
file(GLOB SHADER_SOURCE_FILES "${PROJECT_SOURCE_DIR}/shaders/*.sc")
|
||||||
|
set(SHADER_PLATFORM "linux")
|
||||||
|
set(SHADER_PROFILE "440")
|
||||||
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/shaders")
|
||||||
|
foreach(SHADER_SOURCE ${SHADER_SOURCE_FILES})
|
||||||
|
cmake_path(ABSOLUTE_PATH SHADER_SOURCE NORMALIZE)
|
||||||
|
cmake_path(GET SHADER_SOURCE FILENAME SHADER_NAME)
|
||||||
|
cmake_path(GET SHADER_SOURCE STEM SHADER_STEM)
|
||||||
|
|
||||||
|
set(VERTEX_SHADER_TYPE -1)
|
||||||
|
set(FRAGMENT_SHADER_TYPE -1)
|
||||||
|
set(SHADER_TYPE)
|
||||||
|
string(FIND "${SHADER_NAME}" "vs" VERTEX_SHADER_TYPE)
|
||||||
|
string(FIND "${SHADER_NAME}" "fs" FRAGMENT_SHADER_TYPE)
|
||||||
|
if(${VERTEX_SHADER_TYPE} GREATER -1)
|
||||||
|
set(SHADER_TYPE "vertex")
|
||||||
|
elseif(${FRAGMENT_SHADER_TYPE} GREATER -1)
|
||||||
|
set(SHADER_TYPE "fragment")
|
||||||
|
else()
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SHADER_COMMAND_ARGUMENTS "-f ${SHADER_SOURCE} -o ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_LANGUAGE}/${SHADER_STEM}.bin --type ${SHADER_TYPE} --platform ${SHADER_PLATFORM} --profile ${SHADER_PROFILE}")
|
||||||
|
set(SHADER_COMMAND "${PROJECT_SOURCE_DIR}/tools/shaderc ${SHADER_COMMAND_ARGUMENTS}")
|
||||||
|
|
||||||
|
add_custom_target(${SHADER_NAME} ALL
|
||||||
|
COMMAND /bin/bash -c "${SHADER_COMMAND}"
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
38
README
Normal file
38
README
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
EO
|
||||||
|
|
||||||
|
RETRO 2D GAME
|
||||||
|
FRONT-BACK
|
||||||
|
CRAFTING SYSTEM
|
||||||
|
|
||||||
|
STORY
|
||||||
|
|
||||||
|
PRESTORY
|
||||||
|
|
||||||
|
Nei, a computer engineer, electrician, as well as a soldier. You are stranded
|
||||||
|
in a lost colony of EnO, a planet once deemed all-important for the members of
|
||||||
|
the ISN - Inter-Stellar Nations. For hundreds of stellar revolutions, the
|
||||||
|
planet served as an ingress to the Cycos system. Inside the Cycos system, one
|
||||||
|
found 6 planets, all extremely abundant in rich and valuable materials. The
|
||||||
|
star's radius spanned millions of kilometers and was seen as a perfect
|
||||||
|
candidate for building a megastructure around and extrapolating all energy.
|
||||||
|
Although abundant in materials, these planets housed the most extreme of
|
||||||
|
environments in the whole universe. At first, EnO was the only candidate that
|
||||||
|
seemed to have a normal terrain, relatively safe conditions for a planet with
|
||||||
|
an extremely thin atmosphere, and lack of planetary hazards like strong storms,
|
||||||
|
tsunamis, strong earthquakes, and similar. Many ISN nations started colonies on
|
||||||
|
this planet to study the rich planets from up close. But due to the ignorance
|
||||||
|
of the whole ISN, none of the nations sought to resolve the sharing of land
|
||||||
|
through peace, but only through extensive imperialism. Which led to everything
|
||||||
|
but victory. Through revolutions, the nations saw that there was no place
|
||||||
|
left for EnO. The planet itself turned out to be a hazard because of the
|
||||||
|
explosives and traps still active. The ones still alive on that planet have
|
||||||
|
been left there to rot with the already rotten. You are one of them. And you
|
||||||
|
have to escape this new-born hell.
|
||||||
|
|
||||||
|
MAIN STORY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ENDING
|
||||||
|
|
||||||
|
Nei crafts the ship and traverses the Cycos system, leaving the hell behind.
|
40
assets/models/cube.obj
Normal file
40
assets/models/cube.obj
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# Blender 4.2.3 LTS
|
||||||
|
# www.blender.org
|
||||||
|
mtllib cube.mtl
|
||||||
|
o Cube
|
||||||
|
v 1.000000 1.000000 -1.000000
|
||||||
|
v 1.000000 -1.000000 -1.000000
|
||||||
|
v 1.000000 1.000000 1.000000
|
||||||
|
v 1.000000 -1.000000 1.000000
|
||||||
|
v -1.000000 1.000000 -1.000000
|
||||||
|
v -1.000000 -1.000000 -1.000000
|
||||||
|
v -1.000000 1.000000 1.000000
|
||||||
|
v -1.000000 -1.000000 1.000000
|
||||||
|
vn -0.0000 1.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 1.0000
|
||||||
|
vn -1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -1.0000 -0.0000
|
||||||
|
vn 1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 -1.0000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
s 0
|
||||||
|
usemtl Material
|
||||||
|
f 1/1/1 5/2/1 7/3/1 3/4/1
|
||||||
|
f 4/5/2 3/4/2 7/6/2 8/7/2
|
||||||
|
f 8/8/3 7/9/3 5/10/3 6/11/3
|
||||||
|
f 6/12/4 2/13/4 4/5/4 8/14/4
|
||||||
|
f 2/13/5 1/1/5 3/4/5 4/5/5
|
||||||
|
f 6/11/6 5/10/6 1/1/6 2/13/6
|
1
compile_commands.json
Symbolic link
1
compile_commands.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
build/compile_commands.json
|
6
shaders/fs_basic.sc
Normal file
6
shaders/fs_basic.sc
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
$input v_color0
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_FragColor = v_color0;
|
||||||
|
}
|
4
shaders/varying.def.sc
Normal file
4
shaders/varying.def.sc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
vec3 a_position : POSITION;
|
||||||
|
vec4 a_color0 : COLOR0;
|
||||||
|
|
||||||
|
vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0);
|
8
shaders/vs_basic.sc
Normal file
8
shaders/vs_basic.sc
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
$input a_position, a_color0
|
||||||
|
$output v_color0
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = vec4(a_position, 1.0);
|
||||||
|
v_color0 = a_color0;
|
||||||
|
}
|
173
src/eo.cpp
Normal file
173
src/eo.cpp
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
#include "bx/allocator.h"
|
||||||
|
#include "bx/file.h"
|
||||||
|
#include "bx/filepath.h"
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <iostream>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
#define GLFW_EXPOSE_NATIVE_X11
|
||||||
|
#include "GLFW/glfw3native.h"
|
||||||
|
#include <bx/bx.h>
|
||||||
|
#include <bgfx/bgfx.h>
|
||||||
|
#include <bgfx/platform.h>
|
||||||
|
#include <bgfx/defines.h>
|
||||||
|
#include <assimp/Importer.hpp>
|
||||||
|
#include <assimp/scene.h>
|
||||||
|
#include <assimp/postprocess.h>
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
|
#define DEFAULT_WIDTH 1280
|
||||||
|
#define DEFAULT_HEIGHT 720
|
||||||
|
|
||||||
|
int width = DEFAULT_WIDTH;
|
||||||
|
int height = DEFAULT_HEIGHT;
|
||||||
|
bx::DefaultAllocator g_allocator;
|
||||||
|
bgfx::ProgramHandle program;
|
||||||
|
|
||||||
|
struct ColorVertex {
|
||||||
|
glm::vec3 pos;
|
||||||
|
uint32_t col;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void glfw_error_callback(int error, const char *desc) {
|
||||||
|
std::cout << "--error: " << desc << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool load_model(std::string path) {
|
||||||
|
Assimp::Importer importer;
|
||||||
|
|
||||||
|
const aiScene *scene = importer.ReadFile(path,
|
||||||
|
aiProcess_CalcTangentSpace | aiProcess_Triangulate |
|
||||||
|
aiProcess_JoinIdenticalVertices | aiProcess_SortByPType);
|
||||||
|
if (scene == nullptr) {
|
||||||
|
std::cout << "--error: failed loading model" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bgfx::Memory* load_mem(bx::FileReader* reader, bx::FilePath& filepath) {
|
||||||
|
if (bx::open(reader, filepath) )
|
||||||
|
{
|
||||||
|
uint32_t size = (uint32_t)bx::getSize(reader);
|
||||||
|
const bgfx::Memory* mem = bgfx::alloc(size+1);
|
||||||
|
bx::read(reader, mem->data, size, bx::ErrorAssert{});
|
||||||
|
bx::close(reader);
|
||||||
|
mem->data[mem->size-1] = '\0';
|
||||||
|
return mem;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "--error: failed to load " << filepath.getCPtr() << std::endl;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::ShaderHandle load_shader(bx::FileReader* reader, const char *filename) {
|
||||||
|
bx::FilePath filepath(filename);
|
||||||
|
|
||||||
|
bgfx::ShaderHandle handle = bgfx::createShader(load_mem(reader, filepath));
|
||||||
|
|
||||||
|
fprintf(stdout, "loading shader: %s %d\n", filename, (int) strlen(filename));
|
||||||
|
bgfx::setName(handle, filename, strlen(filename));
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::ProgramHandle load_program(bx::FileReader *reader, const char *vs_name, const char *fs_name) {
|
||||||
|
bgfx::ShaderHandle vsh = load_shader(reader, vs_name);
|
||||||
|
bgfx::ShaderHandle fsh = load_shader(reader, fs_name);
|
||||||
|
|
||||||
|
return bgfx::createProgram(vsh, fsh, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
glfwSetErrorCallback(glfw_error_callback);
|
||||||
|
int ret = glfwInit();
|
||||||
|
if (ret < 0) {
|
||||||
|
std::cout << "--error: failed initializing glfw" << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||||
|
|
||||||
|
GLFWwindow *w = glfwCreateWindow(800, 600, "eo", NULL, NULL);
|
||||||
|
if (!w) {
|
||||||
|
std::cout << "--error: failed creating window" << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bx::AllocatorI* allocator = &g_allocator;
|
||||||
|
bx::FileReader* _reader = BX_NEW(allocator, bx::FileReader);
|
||||||
|
|
||||||
|
bgfx::Init init;
|
||||||
|
init.platformData.ndt = glfwGetX11Display();
|
||||||
|
init.platformData.nwh = (void *)(uintptr_t) glfwGetX11Window(w);
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
glfwGetWindowSize(w, &width, &height);
|
||||||
|
init.resolution.width = width;
|
||||||
|
init.resolution.height = height;
|
||||||
|
init.resolution.reset = BGFX_RESET_VSYNC;
|
||||||
|
if (!bgfx::init(init)) {
|
||||||
|
std::cout << "--error: failed initializing bgfx" << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bgfx::ViewId clear_view = 0;
|
||||||
|
bgfx::setViewClear(clear_view, BGFX_CLEAR_COLOR, 0x000000FF);
|
||||||
|
bgfx::setViewRect(clear_view, 0, 0, width, height);
|
||||||
|
|
||||||
|
ColorVertex kTriangleVertices[] = {
|
||||||
|
{{-0.5f, -0.5f, 0.0f}, 0x339933FF},
|
||||||
|
{{0.5f, -0.5f, 0.0f}, 0x993333FF},
|
||||||
|
{{0.0f, 0.5f, 0.0f}, 0x333399FF},
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t kTriangleIndices[] = {
|
||||||
|
0, 1, 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
bgfx::VertexLayout layout;
|
||||||
|
layout.begin()
|
||||||
|
.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
|
||||||
|
.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
|
||||||
|
.end();
|
||||||
|
|
||||||
|
bgfx::VertexBufferHandle vertex_buffer = bgfx::createVertexBuffer(bgfx::makeRef(kTriangleVertices, sizeof(kTriangleVertices)), layout);
|
||||||
|
bgfx::IndexBufferHandle index_buffer = bgfx::createIndexBuffer(bgfx::makeRef(kTriangleIndices, sizeof(kTriangleIndices)));
|
||||||
|
|
||||||
|
program = load_program(_reader, "shaders/vs_basic.bin", "shaders/fs_basic.bin");
|
||||||
|
|
||||||
|
while (!glfwWindowShouldClose(w)) {
|
||||||
|
glfwPollEvents();
|
||||||
|
|
||||||
|
std::int32_t display_w, display_h;
|
||||||
|
glfwGetFramebufferSize(w, &display_w, &display_h);
|
||||||
|
if (display_w != width || display_h != height) {
|
||||||
|
bgfx::reset(display_w,display_h, BGFX_RESET_VSYNC);
|
||||||
|
bgfx::setViewRect(clear_view, 0, 0, bgfx::BackbufferRatio::Equal);
|
||||||
|
width = display_w;
|
||||||
|
height = display_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::touch(clear_view);
|
||||||
|
bgfx::setState(
|
||||||
|
BGFX_STATE_WRITE_R
|
||||||
|
| BGFX_STATE_WRITE_G
|
||||||
|
| BGFX_STATE_WRITE_B
|
||||||
|
| BGFX_STATE_WRITE_A
|
||||||
|
);
|
||||||
|
bgfx::setVertexBuffer(0, vertex_buffer);
|
||||||
|
bgfx::setIndexBuffer(index_buffer);
|
||||||
|
bgfx::submit(clear_view, program);
|
||||||
|
bgfx::frame();
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::shutdown();
|
||||||
|
glfwTerminate();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
1
tools/shaderc
Symbolic link
1
tools/shaderc
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../build/thirdparty/bgfx.cmake/cmake/bgfx/shaderc
|
Loading…
Reference in New Issue
Block a user