Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1057099fcf | |||
| 17577b6e8b | |||
| db442e2775 | |||
| 23cd50d29e | |||
| 28088d1ed1 |
+5
-2
@@ -9,7 +9,7 @@ else()
|
|||||||
project(nostalgia C CXX)
|
project(nostalgia C CXX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(deps/oxlib/deps/buildcore/base.cmake)
|
include(deps/buildcore/base.cmake)
|
||||||
|
|
||||||
set(OX_ENABLE_TRACEHOOK OFF CACHE BOOL "Generate OxTraceHook shared library for uprobes")
|
set(OX_ENABLE_TRACEHOOK OFF CACHE BOOL "Generate OxTraceHook shared library for uprobes")
|
||||||
|
|
||||||
@@ -35,7 +35,10 @@ else()
|
|||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(deps/oxlib)
|
add_subdirectory(deps/ox)
|
||||||
|
include_directories(
|
||||||
|
deps/ox/src
|
||||||
|
)
|
||||||
add_subdirectory(deps/teagba)
|
add_subdirectory(deps/teagba)
|
||||||
|
|
||||||
if(NOT BUILDCORE_TARGET STREQUAL "gba")
|
if(NOT BUILDCORE_TARGET STREQUAL "gba")
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
BC_VAR_PROJECT_NAME=nostalgia
|
BC_VAR_PROJECT_NAME=nostalgia
|
||||||
BC_VAR_PROJECT_NAME_CAP=Nostalgia
|
BC_VAR_PROJECT_NAME_CAP=Nostalgia
|
||||||
BC_VAR_DEVENV_ROOT=util
|
BC_VAR_DEVENV_ROOT=util
|
||||||
BUILDCORE_PATH=deps/oxlib/deps/buildcore
|
BUILDCORE_PATH=deps/buildcore
|
||||||
include ${BUILDCORE_PATH}/base.mk
|
include ${BUILDCORE_PATH}/base.mk
|
||||||
|
|
||||||
ifeq ($(BC_VAR_OS),darwin)
|
ifeq ($(BC_VAR_OS),darwin)
|
||||||
@@ -13,21 +13,8 @@ else
|
|||||||
endif
|
endif
|
||||||
PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}
|
PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}
|
||||||
|
|
||||||
.PHONY: git-setup-ox-remote
|
|
||||||
git-setup-ox-remote:
|
|
||||||
git remote add -f ox-master git@git.drinkingtea.net:drinkingtea/ox.git
|
|
||||||
|
|
||||||
.PHONY: git-pull-ox
|
|
||||||
git-pull-ox:
|
|
||||||
git fetch ox-master master
|
|
||||||
git subtree pull --prefix deps/oxlib ox-master master --squash
|
|
||||||
|
|
||||||
.PHONY: git-push-ox
|
|
||||||
git-push-ox:
|
|
||||||
git subtree push --prefix=deps/oxlib ox-master master
|
|
||||||
|
|
||||||
.PHONY: pkg-gba
|
.PHONY: pkg-gba
|
||||||
pkg-gba: build-pack build-gba-player
|
pkg-gba: build
|
||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP}
|
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP}
|
||||||
|
|
||||||
.PHONY: pkg-mac
|
.PHONY: pkg-mac
|
||||||
@@ -39,44 +26,25 @@ generate-studio-rsrc:
|
|||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json
|
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json
|
||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json
|
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json
|
||||||
|
|
||||||
.PHONY: build-gba-player
|
|
||||||
build-gba-player:
|
|
||||||
cmake --build ./build/gba-*
|
|
||||||
|
|
||||||
.PHONY: build-player
|
.PHONY: build-player
|
||||||
build-player:
|
build-player:
|
||||||
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} ${BC_VAR_PROJECT_NAME_CAP}
|
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} ${BC_VAR_PROJECT_NAME_CAP}
|
||||||
|
|
||||||
.PHONY: build-pack
|
|
||||||
build-pack:
|
|
||||||
cmake --build ./build/${BC_VAR_CURRENT_BUILD} --target ${BC_VAR_PROJECT_NAME}-pack
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
run: build-player
|
run: build-player
|
||||||
${PROJECT_PLAYER} sample_project
|
${PROJECT_PLAYER} sample_project
|
||||||
|
|
||||||
.PHONY: build-studio
|
|
||||||
build-studio:
|
|
||||||
cmake --build ./build/${BC_VAR_CURRENT_BUILD} --target ${BC_VAR_PROJECT_NAME_CAP}Studio
|
|
||||||
|
|
||||||
.PHONY: run-studio
|
.PHONY: run-studio
|
||||||
run-studio: build-studio
|
run-studio: build
|
||||||
${PROJECT_STUDIO}
|
${PROJECT_STUDIO}
|
||||||
|
|
||||||
.PHONY: gba-run
|
.PHONY: gba-run
|
||||||
gba-run: pkg-gba
|
gba-run: pkg-gba
|
||||||
${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba
|
${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba
|
||||||
|
|
||||||
.PHONY: debug
|
.PHONY: debug
|
||||||
debug: build
|
debug: build
|
||||||
${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project
|
${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project
|
||||||
|
|
||||||
.PHONY: debug-studio
|
.PHONY: debug-studio
|
||||||
debug-studio: build
|
debug-studio: build
|
||||||
${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO}
|
${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO}
|
||||||
|
|
||||||
|
|
||||||
.PHONY: configure-gba
|
.PHONY: configure-gba
|
||||||
configure-gba:
|
configure-gba:
|
||||||
${BC_CMD_SETUP_BUILD} --toolchain=deps/gbabuildcore/cmake/modules/GBA.cmake --target=gba --current_build=0 --build_type=release --build_root=${BC_VAR_BUILD_PATH}
|
${BC_CMD_SETUP_BUILD} --toolchain=deps/gbabuildcore/cmake/modules/GBA.cmake --target=gba --current_build=0 --build_type=release --build_root=${BC_VAR_BUILD_PATH}
|
||||||
|
|||||||
Vendored
+23
-23
@@ -89,7 +89,7 @@ struct GLObject: public Base {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr operator GLuint const&() const noexcept {
|
constexpr operator const GLuint&() const noexcept {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ struct FrameBuffer {
|
|||||||
return fbo.id;
|
return fbo.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr operator GLuint const&() const noexcept {
|
constexpr operator const GLuint&() const noexcept {
|
||||||
return fbo.id;
|
return fbo.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,14 +158,14 @@ struct FrameBuffer {
|
|||||||
|
|
||||||
class FrameBufferBind {
|
class FrameBufferBind {
|
||||||
private:
|
private:
|
||||||
static FrameBuffer const *s_activeFb;
|
static const FrameBuffer *s_activeFb;
|
||||||
FrameBuffer const *m_restoreFb = nullptr;
|
const FrameBuffer *m_restoreFb = nullptr;
|
||||||
public:
|
public:
|
||||||
explicit FrameBufferBind(FrameBuffer const &fb) noexcept;
|
explicit FrameBufferBind(const FrameBuffer &fb) noexcept;
|
||||||
~FrameBufferBind() noexcept;
|
~FrameBufferBind() noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
void bind(FrameBuffer const &fb) noexcept;
|
void bind(const FrameBuffer &fb) noexcept;
|
||||||
|
|
||||||
struct ShaderVarSet {
|
struct ShaderVarSet {
|
||||||
GLsizei len{};
|
GLsizei len{};
|
||||||
@@ -176,7 +176,7 @@ struct ProgramSource {
|
|||||||
ox::Vector<glutils::ShaderVarSet> const shaderParams;
|
ox::Vector<glutils::ShaderVarSet> const shaderParams;
|
||||||
GLsizei const rowLen = [this] {
|
GLsizei const rowLen = [this] {
|
||||||
GLsizei len{};
|
GLsizei len{};
|
||||||
for (auto const &v : shaderParams) {
|
for (auto const&v : shaderParams) {
|
||||||
len += v.len;
|
len += v.len;
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
@@ -187,23 +187,23 @@ struct ProgramSource {
|
|||||||
ox::String const geomShader{};
|
ox::String const geomShader{};
|
||||||
};
|
};
|
||||||
|
|
||||||
ox::Result<GLProgram> buildShaderProgram(ProgramSource const &src) noexcept;
|
ox::Result<GLProgram> buildShaderProgram(ProgramSource const&src) noexcept;
|
||||||
|
|
||||||
ox::Result<GLProgram> buildShaderProgram(
|
ox::Result<GLProgram> buildShaderProgram(
|
||||||
ox::CStringView const &vert,
|
ox::CStringView const&vert,
|
||||||
ox::CStringView const &frag,
|
ox::CStringView const&frag,
|
||||||
ox::CStringView const &geo = "") noexcept;
|
ox::CStringView const&geo = "") noexcept;
|
||||||
|
|
||||||
void setupShaderParams(
|
void setupShaderParams(
|
||||||
GLProgram const &shader,
|
GLProgram const&shader,
|
||||||
ox::Vector<ShaderVarSet> const &vars,
|
ox::Vector<ShaderVarSet> const&vars,
|
||||||
GLsizei vertexRowLen) noexcept;
|
GLsizei vertexRowLen) noexcept;
|
||||||
|
|
||||||
void setupShaderParams(GLProgram const &shader, ox::Vector<ShaderVarSet> const &vars) noexcept;
|
void setupShaderParams(GLProgram const&shader, ox::Vector<ShaderVarSet> const&vars) noexcept;
|
||||||
|
|
||||||
GLVertexArray generateVertexArrayObject() noexcept;
|
glutils::GLVertexArray generateVertexArrayObject() noexcept;
|
||||||
|
|
||||||
GLBuffer generateBuffer() noexcept;
|
glutils::GLBuffer generateBuffer() noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
FrameBuffer generateFrameBuffer(int width, int height) noexcept;
|
FrameBuffer generateFrameBuffer(int width, int height) noexcept;
|
||||||
@@ -215,20 +215,20 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept;
|
|||||||
*/
|
*/
|
||||||
void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept;
|
void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept;
|
||||||
|
|
||||||
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const &sz) noexcept;
|
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const&sz) noexcept;
|
||||||
|
|
||||||
struct BufferSet {
|
struct BufferSet {
|
||||||
GLVertexArray vao;
|
glutils::GLVertexArray vao;
|
||||||
GLBuffer vbo;
|
glutils::GLBuffer vbo;
|
||||||
GLBuffer ebo;
|
glutils::GLBuffer ebo;
|
||||||
GLTexture tex;
|
glutils::GLTexture tex;
|
||||||
ox::Vector<float> vertices;
|
ox::Vector<float> vertices;
|
||||||
ox::Vector<GLuint> elements;
|
ox::Vector<GLuint> elements;
|
||||||
};
|
};
|
||||||
|
|
||||||
void sendVbo(BufferSet const &bs) noexcept;
|
void sendVbo(BufferSet const&bs) noexcept;
|
||||||
|
|
||||||
void sendEbo(BufferSet const &bs) noexcept;
|
void sendEbo(BufferSet const&bs) noexcept;
|
||||||
|
|
||||||
void clearScreen() noexcept;
|
void clearScreen() noexcept;
|
||||||
|
|
||||||
|
|||||||
Vendored
+24
-47
@@ -46,9 +46,9 @@ template struct GLObject<deleteVertexArray>;
|
|||||||
template struct GLObject<deleteProgram>;
|
template struct GLObject<deleteProgram>;
|
||||||
template struct GLObject<deleteShader>;
|
template struct GLObject<deleteShader>;
|
||||||
|
|
||||||
FrameBuffer const *FrameBufferBind::s_activeFb = nullptr;
|
const FrameBuffer *FrameBufferBind::s_activeFb = nullptr;
|
||||||
|
|
||||||
FrameBufferBind::FrameBufferBind(FrameBuffer const &fb) noexcept: m_restoreFb(s_activeFb) {
|
FrameBufferBind::FrameBufferBind(const FrameBuffer &fb) noexcept: m_restoreFb(s_activeFb) {
|
||||||
s_activeFb = &fb;
|
s_activeFb = &fb;
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
||||||
glViewport(0, 0, fb.width, fb.height);
|
glViewport(0, 0, fb.width, fb.height);
|
||||||
@@ -64,15 +64,15 @@ FrameBufferBind::~FrameBufferBind() noexcept {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bind(FrameBuffer const &fb) noexcept {
|
void bind(const FrameBuffer &fb) noexcept {
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
||||||
glViewport(0, 0, fb.width, fb.height);
|
glViewport(0, 0, fb.width, fb.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ox::Result<GLShader> buildShader(
|
static ox::Result<GLShader> buildShader(
|
||||||
GLuint const shaderType,
|
GLuint shaderType,
|
||||||
GLchar const *src,
|
const GLchar *src,
|
||||||
ox::StringViewCR shaderName) noexcept {
|
ox::StringViewCR shaderName) noexcept {
|
||||||
GLShader shader(glCreateShader(shaderType));
|
GLShader shader(glCreateShader(shaderType));
|
||||||
glShaderSource(shader, 1, &src, nullptr);
|
glShaderSource(shader, 1, &src, nullptr);
|
||||||
@@ -88,7 +88,7 @@ static ox::Result<GLShader> buildShader(
|
|||||||
return shader;
|
return shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Result<GLProgram> buildShaderProgram(ProgramSource const &src) noexcept {
|
ox::Result<GLProgram> buildShaderProgram(ProgramSource const&src) noexcept {
|
||||||
OX_REQUIRE_M(program, buildShaderProgram(
|
OX_REQUIRE_M(program, buildShaderProgram(
|
||||||
src.vertShader,
|
src.vertShader,
|
||||||
src.fragShader,
|
src.fragShader,
|
||||||
@@ -98,11 +98,11 @@ ox::Result<GLProgram> buildShaderProgram(ProgramSource const &src) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setupShaderParams(
|
void setupShaderParams(
|
||||||
GLProgram const &shader,
|
GLProgram const&shader,
|
||||||
ox::Vector<ShaderVarSet> const &vars,
|
ox::Vector<ShaderVarSet> const&vars,
|
||||||
GLsizei vertexRowLen) noexcept {
|
GLsizei vertexRowLen) noexcept {
|
||||||
// setup vars
|
// setup vars
|
||||||
for (size_t lenWritten = 0; auto const &v : vars) {
|
for (size_t lenWritten = 0; auto const&v : vars) {
|
||||||
auto const attr = static_cast<GLuint>(glGetAttribLocation(shader, v.name.c_str()));
|
auto const attr = static_cast<GLuint>(glGetAttribLocation(shader, v.name.c_str()));
|
||||||
glEnableVertexAttribArray(attr);
|
glEnableVertexAttribArray(attr);
|
||||||
glVertexAttribPointer(
|
glVertexAttribPointer(
|
||||||
@@ -113,19 +113,19 @@ void setupShaderParams(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupShaderParams(GLProgram const &shader, ox::Vector<ShaderVarSet> const &vars) noexcept {
|
void setupShaderParams(GLProgram const&shader, ox::Vector<ShaderVarSet> const&vars) noexcept {
|
||||||
// get row len
|
// get row len
|
||||||
GLsizei vertexRowLen{};
|
GLsizei vertexRowLen{};
|
||||||
for (auto const &v : vars) {
|
for (auto const&v : vars) {
|
||||||
vertexRowLen += v.len;
|
vertexRowLen += v.len;
|
||||||
}
|
}
|
||||||
setupShaderParams(shader, vars, vertexRowLen);
|
setupShaderParams(shader, vars, vertexRowLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Result<GLProgram> buildShaderProgram(
|
ox::Result<GLProgram> buildShaderProgram(
|
||||||
ox::CStringView const &vert,
|
ox::CStringView const&vert,
|
||||||
ox::CStringView const &frag,
|
ox::CStringView const&frag,
|
||||||
ox::CStringView const &geo) noexcept {
|
ox::CStringView const&geo) noexcept {
|
||||||
GLProgram prgm(glCreateProgram());
|
GLProgram prgm(glCreateProgram());
|
||||||
OX_REQUIRE(vs, buildShader(GL_VERTEX_SHADER, vert.c_str(), "vshad"));
|
OX_REQUIRE(vs, buildShader(GL_VERTEX_SHADER, vert.c_str(), "vshad"));
|
||||||
glAttachShader(prgm, vs);
|
glAttachShader(prgm, vs);
|
||||||
@@ -162,30 +162,16 @@ FrameBuffer generateFrameBuffer(int width, int height) noexcept {
|
|||||||
// color texture
|
// color texture
|
||||||
glGenTextures(1, &fb.color.id);
|
glGenTextures(1, &fb.color.id);
|
||||||
glBindTexture(GL_TEXTURE_2D, fb.color);
|
glBindTexture(GL_TEXTURE_2D, fb.color);
|
||||||
glTexImage2D(
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
|
||||||
GL_TEXTURE_2D,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
GL_UNSIGNED_BYTE,
|
|
||||||
nullptr);
|
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
glFramebufferTexture2D(
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb.color, 0);
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb.color, 0);
|
|
||||||
// depth texture
|
// depth texture
|
||||||
glGenRenderbuffers(1, &fb.depth.id);
|
glGenRenderbuffers(1, &fb.depth.id);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, fb.depth);
|
glBindRenderbuffer(GL_RENDERBUFFER, fb.depth);
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
|
||||||
glFramebufferRenderbuffer(
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fb.depth);
|
||||||
GL_FRAMEBUFFER,
|
|
||||||
GL_DEPTH_STENCIL_ATTACHMENT,
|
|
||||||
GL_RENDERBUFFER,
|
|
||||||
fb.depth);
|
|
||||||
// verify FBO
|
// verify FBO
|
||||||
oxAssert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE, "Frame Buffer is incomplete");
|
oxAssert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE, "Frame Buffer is incomplete");
|
||||||
// restore primary FB
|
// restore primary FB
|
||||||
@@ -203,16 +189,7 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
glBindFramebuffer(GL_FRAMEBUFFER, fb);
|
||||||
// color texture
|
// color texture
|
||||||
glBindTexture(GL_TEXTURE_2D, fb.color);
|
glBindTexture(GL_TEXTURE_2D, fb.color);
|
||||||
glTexImage2D(
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
|
||||||
GL_TEXTURE_2D,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
GL_UNSIGNED_BYTE,
|
|
||||||
nullptr);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
// depth texture
|
// depth texture
|
||||||
@@ -224,7 +201,7 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
|
|||||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void resizeInitFrameBuffer(FrameBuffer &fb, int const width, int const height) noexcept {
|
void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
|
||||||
if (!fb) {
|
if (!fb) {
|
||||||
fb = generateFrameBuffer(width, height);
|
fb = generateFrameBuffer(width, height);
|
||||||
return;
|
return;
|
||||||
@@ -232,18 +209,18 @@ void resizeInitFrameBuffer(FrameBuffer &fb, int const width, int const height) n
|
|||||||
resizeFrameBuffer(fb, width, height);
|
resizeFrameBuffer(fb, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const &sz) noexcept {
|
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const&sz) noexcept {
|
||||||
resizeInitFrameBuffer(fb, sz.width, sz.height);
|
resizeInitFrameBuffer(fb, sz.width, sz.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendVbo(BufferSet const &bs) noexcept {
|
void sendVbo(BufferSet const&bs) noexcept {
|
||||||
auto const bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.vertices)::value_type) * bs.vertices.size());
|
const auto bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.vertices)::value_type) * bs.vertices.size());
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, bs.vbo);
|
glBindBuffer(GL_ARRAY_BUFFER, bs.vbo);
|
||||||
glBufferData(GL_ARRAY_BUFFER, bufferSize, bs.vertices.data(), GL_DYNAMIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, bufferSize, bs.vertices.data(), GL_DYNAMIC_DRAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendEbo(BufferSet const &bs) noexcept {
|
void sendEbo(BufferSet const&bs) noexcept {
|
||||||
auto const bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.elements)::value_type) * bs.elements.size());
|
const auto bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.elements)::value_type) * bs.elements.size());
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bs.ebo);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bs.ebo);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferSize, bs.elements.data(), GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferSize, bs.elements.data(), GL_STATIC_DRAW);
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+12
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"log_functions": [
|
||||||
|
{
|
||||||
|
"function": "ox::trace::gdblogger::captureLogFunc",
|
||||||
|
"ignore_frames": 3,
|
||||||
|
"file_var": "file",
|
||||||
|
"line_var": "line",
|
||||||
|
"channel_var": "ch",
|
||||||
|
"msg_var": "msg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -3,10 +3,7 @@ build/gba
|
|||||||
build/*-asan
|
build/*-asan
|
||||||
build/*-debug
|
build/*-debug
|
||||||
build/*-release
|
build/*-release
|
||||||
dist
|
|
||||||
.current_build
|
|
||||||
tags
|
tags
|
||||||
compile_commands.json
|
|
||||||
conanbuildinfo.cmake
|
conanbuildinfo.cmake
|
||||||
conanbuildinfo.txt
|
conanbuildinfo.txt
|
||||||
conaninfo.txt
|
conaninfo.txt
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
language: cpp
|
||||||
|
sudo: false
|
||||||
|
dist: trusty
|
||||||
|
compiler:
|
||||||
|
- clang
|
||||||
|
- gcc
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- cmake
|
||||||
|
script: ./scripts/cibuild
|
||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.19)
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0110 NEW) # requires CMake 3.19
|
set(CMAKE_POLICY_DEFAULT_CMP0110 NEW) # requires CMake 3.19
|
||||||
|
|
||||||
project(Ox CXX)
|
project(Ox CXX)
|
||||||
|
|
||||||
include(deps/buildcore/base.cmake)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||||
|
include(address_sanitizer)
|
||||||
|
|
||||||
if(NOT DEFINED OX_RUN_TESTS)
|
if(NOT DEFINED OX_RUN_TESTS)
|
||||||
set(OX_RUN_TESTS ON)
|
set(OX_RUN_TESTS ON)
|
||||||
Vendored
+68
@@ -0,0 +1,68 @@
|
|||||||
|
OS=$(shell uname | tr [:upper:] [:lower:])
|
||||||
|
HOST_ENV=${OS}-$(shell uname -m)
|
||||||
|
DEVENV=devenv$(shell pwd | sed 's/\//-/g')
|
||||||
|
DEVENV_IMAGE=wombatant/devenv
|
||||||
|
ifneq ($(shell which docker 2>&1),)
|
||||||
|
ifeq ($(shell docker inspect --format="{{.State.Status}}" ${DEVENV} 2>&1),running)
|
||||||
|
ENV_RUN=docker exec -i -t --user $(shell id -u ${USER}) ${DEVENV}
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
all:
|
||||||
|
${ENV_RUN} ./scripts/run-make build
|
||||||
|
preinstall:
|
||||||
|
${ENV_RUN} ./scripts/run-make build preinstall
|
||||||
|
install:
|
||||||
|
${ENV_RUN} ./scripts/run-make build install
|
||||||
|
clean:
|
||||||
|
${ENV_RUN} ./scripts/run-make build clean
|
||||||
|
purge:
|
||||||
|
${ENV_RUN} rm -rf build
|
||||||
|
test:
|
||||||
|
${ENV_RUN} ./scripts/run-make build test
|
||||||
|
|
||||||
|
devenv:
|
||||||
|
docker pull ${DEVENV_IMAGE}
|
||||||
|
docker run -d -v $(shell pwd):/usr/src/project \
|
||||||
|
-e LOCAL_USER_ID=$(shell id -u ${USER}) \
|
||||||
|
--name ${DEVENV} -t ${DEVENV_IMAGE} bash
|
||||||
|
devenv-destroy:
|
||||||
|
docker rm -f ${DEVENV}
|
||||||
|
devenv-shell:
|
||||||
|
${ENV_RUN} bash
|
||||||
|
|
||||||
|
configure-release:
|
||||||
|
${ENV_RUN} rm -rf build/${HOST_ENV}-release
|
||||||
|
${ENV_RUN} ./scripts/setup_build ${HOST_ENV}
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s ${HOST_ENV}-release build/current
|
||||||
|
|
||||||
|
configure-debug:
|
||||||
|
${ENV_RUN} rm -rf build/${HOST_ENV}-debug
|
||||||
|
${ENV_RUN} ./scripts/setup_build ${HOST_ENV} debug
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s ${HOST_ENV}-debug build/current
|
||||||
|
|
||||||
|
configure-asan:
|
||||||
|
${ENV_RUN} rm -rf build/${HOST_ENV}-asan
|
||||||
|
${ENV_RUN} ./scripts/setup_build ${HOST_ENV} asan
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s ${HOST_ENV}-asan build/current
|
||||||
|
|
||||||
|
configure-windows:
|
||||||
|
${ENV_RUN} rm -rf build/windows
|
||||||
|
${ENV_RUN} ./scripts/setup_build windows
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s windows build/current
|
||||||
|
|
||||||
|
configure-windows-debug:
|
||||||
|
${ENV_RUN} rm -rf build/windows
|
||||||
|
${ENV_RUN} ./scripts/setup_build windows debug
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s windows build/current
|
||||||
|
|
||||||
|
configure-gba:
|
||||||
|
${ENV_RUN} rm -rf build/gba-release
|
||||||
|
${ENV_RUN} ./scripts/setup_build gba
|
||||||
|
${ENV_RUN} rm -f build/current
|
||||||
|
${ENV_RUN} ln -s gba-release build/current
|
||||||
Vendored
+24
@@ -0,0 +1,24 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME "Generic")
|
||||||
|
|
||||||
|
set(DEVKITARM $ENV{DEVKITARM})
|
||||||
|
|
||||||
|
if(NOT DEVKITARM)
|
||||||
|
message(FATAL_ERROR "DEVKITARM environment variable not set")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER ${DEVKITARM}/bin/arm-none-eabi-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER ${DEVKITARM}/bin/arm-none-eabi-g++)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH ${DEVKITARM})
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_LIBRARY_PREFIXES lib)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||||
|
|
||||||
|
set(LINKER_FLAGS "-specs=gba.specs")
|
||||||
|
add_definitions (
|
||||||
|
-DARM7
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
Vendored
+18
@@ -0,0 +1,18 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
|
||||||
|
|
||||||
|
# cross compilers to use for C and C++
|
||||||
|
set(CMAKE_C_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-g++)
|
||||||
|
set(CMAKE_RC_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-windres)
|
||||||
|
|
||||||
|
# target environment on the build host system
|
||||||
|
# set 1st to dir with the cross compiler's C/C++ headers/libs
|
||||||
|
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
|
||||||
|
|
||||||
|
# modify default behavior of FIND_XXX() commands to
|
||||||
|
# search for headers/libs in the target environment and
|
||||||
|
# search for programs in the build host environment
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
# This file belongs Nick Overdijk, and is from https://github.com/NickNick/wubwubcmake
|
||||||
|
# The MIT License (MIT)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Nick Overdijk
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
# this software and associated documentation files (the "Software"), to deal in
|
||||||
|
# the Software without restriction, including without limitation the rights to
|
||||||
|
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
# the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
# subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
|
# copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.option(USE_ASAN "Enable Address Sanitizer, if your compiler supports it" ON)
|
||||||
|
|
||||||
|
option(USE_ASAN "Enable Address Sanitizer, if your compiler supports it" OFF)
|
||||||
|
if(USE_ASAN)
|
||||||
|
include(CheckCXXSourceCompiles)
|
||||||
|
# If the compiler understands -fsanitize=address, add it to the flags (gcc since 4.8 & clang since version 3.2)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS_BAK "${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize=address")
|
||||||
|
CHECK_CXX_SOURCE_COMPILES("int main() { return 0; }" FLAG_FSANA_SUPPORTED)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_BAK}")
|
||||||
|
|
||||||
|
if(FLAG_FSANA_SUPPORTED)
|
||||||
|
set(asan_flag "-fsanitize=address")
|
||||||
|
else(FLAG_FSANA_SUPPORTED)
|
||||||
|
# Alternatively, try if it understands -faddress-sanitizer (clang until version 3.2)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -faddress-sanitizer")
|
||||||
|
CHECK_CXX_SOURCE_COMPILES("int main() { return 0; }" FLAG_FASAN_SUPPORTED)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_BAK}")
|
||||||
|
|
||||||
|
if(FLAG_FASAN_SUPPORTED)
|
||||||
|
set(asan_flag "-faddress-sanitizer")
|
||||||
|
endif(FLAG_FASAN_SUPPORTED)
|
||||||
|
endif(FLAG_FSANA_SUPPORTED)
|
||||||
|
|
||||||
|
if(FLAG_FSANA_SUPPORTED OR FLAG_FASAN_SUPPORTED)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${asan_flag}")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${asan_flag}")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${asan_flag}")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${asan_flag}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif(USE_ASAN)
|
||||||
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user