[nostalgia/core] Fix imgui initialization

This commit is contained in:
Gary Talent 2021-07-06 20:32:54 -05:00
parent 14cddf3d36
commit 3e555d38e5
2 changed files with 18 additions and 12 deletions

View File

@ -8,7 +8,6 @@
#include <GLFW/glfw3.h>
#include <imgui.h>
#include <imgui_impl_glfw.h>
#include <nostalgia/core/userland/gfx.hpp>
@ -38,10 +37,10 @@ ox::Error initGfx(Context *ctx) noexcept {
}
glfwSetWindowUserPointer(id->window, ctx);
glfwMakeContextCurrent(id->window);
oxReturnError(renderer::init(ctx));
oxReturnError(OxError(glfwInit() != 0));
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGui_ImplGlfw_InitForOpenGL(id->window, true);
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
oxReturnError(renderer::init(ctx));
return OxError(0);
}

View File

@ -8,11 +8,14 @@
#include <array>
#include <nostalgia/glutils/glutils.hpp>
#define IMGUI_IMPL_OPENGL_ES3
#include <imgui_impl_opengl3.h>
#include <ox/std/bit.hpp>
#include <ox/std/fmt.hpp>
#include <nostalgia/glutils/glutils.hpp>
#include <nostalgia/core/config.hpp>
#include <nostalgia/core/gfx.hpp>
@ -48,7 +51,7 @@ struct GlImplData {
};
constexpr const GLchar *bgvshad = R"(
#version 150
{}
in vec2 vTexCoord;
in vec2 position;
out vec2 fTexCoord;
@ -59,7 +62,7 @@ constexpr const GLchar *bgvshad = R"(
})";
constexpr const GLchar *bgfshad = R"(
#version 150
{}
out vec4 outColor;
in vec2 fTexCoord;
uniform sampler2D image;
@ -114,7 +117,7 @@ static void initBackgroundBufferObjects(Context *ctx, Background *bg) noexcept {
const auto i = bgVertexRow(x, y);
auto vbo = &bg->bgVertices[i * BgVertexVboLength];
auto ebo = &bg->bgElements[i * BgVertexEboLength];
setTileBufferObject(ctx, i * BgVertexVboRows, x, y, 0, vbo, ebo);
setTileBufferObject(ctx, i * BgVertexVboRows, static_cast<float>(x), static_cast<float>(y), 0, vbo, ebo);
}
}
}
@ -191,7 +194,7 @@ static void drawBackground(Background *bg) noexcept {
renderer::sendVbo(*bg);
}
glBindTexture(GL_TEXTURE_2D, bg->tex);
glDrawElements(GL_TRIANGLES, bg->bgElements.size(), GL_UNSIGNED_INT, 0);
glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(bg->bgElements.size()), GL_UNSIGNED_INT, nullptr);
}
}
@ -206,12 +209,16 @@ static void drawBackgrounds(GlImplData *id) noexcept {
}
ox::Error init(Context *ctx) noexcept {
constexpr auto GlslVersion = "#version 150";
const auto id = new GlImplData;
ctx->setRendererData(id);
oxReturnError(glutils::buildShaderProgram(bgvshad, bgfshad).moveTo(&id->bgShader));
const auto vshad = ox::sfmt(bgvshad, GlslVersion);
const auto fshad = ox::sfmt(bgfshad, GlslVersion);
oxReturnError(glutils::buildShaderProgram(vshad.c_str(), fshad.c_str()).moveTo(&id->bgShader));
for (auto &bg : id->backgrounds) {
initBackgroundBufferset(ctx, id->bgShader, &bg);
}
ImGui_ImplOpenGL3_Init(GlslVersion);
return OxError(0);
}
@ -298,7 +305,7 @@ void setTile(Context *ctx, int layer, int column, int row, uint8_t tile) noexcep
auto &bg = id->backgrounds[z];
auto vbo = &bg.bgVertices[i * renderer::BgVertexVboLength];
auto ebo = &bg.bgElements[i * renderer::BgVertexEboLength];
renderer::setTileBufferObject(ctx, i * renderer::BgVertexVboRows, x, y, tile, vbo, ebo);
renderer::setTileBufferObject(ctx, i * renderer::BgVertexVboRows, static_cast<float>(x), static_cast<float>(y), tile, vbo, ebo);
bg.updated = true;
}