[nostalgia/core/studio] Cleanup and decouple main TileSheetEditor drawing from ImGui

This commit is contained in:
2022-02-13 02:25:14 -06:00
parent 779dd1fd05
commit 7370b23c9d
10 changed files with 123 additions and 128 deletions
@@ -18,7 +18,7 @@ ox::Error TileSheetGrid::buildShader() noexcept {
return glutils::buildShaderProgram(pixelLineVshad, pixelLineFshad, pixelLineGshad).moveTo(&m_shader);
}
void TileSheetGrid::draw(bool update, const ImVec2 &scroll) noexcept {
void TileSheetGrid::draw(bool update, const common::Vec2 &scroll) noexcept {
glLineWidth(3 * m_pixelSizeMod * 0.5f);
glUseProgram(m_shader);
glBindVertexArray(m_bufferSet.vao);
@@ -30,13 +30,13 @@ void TileSheetGrid::draw(bool update, const ImVec2 &scroll) noexcept {
glDrawArrays(GL_POINTS, 0, m_bufferSet.vertices.size() / VertexVboRowLength);
}
void TileSheetGrid::initBufferSet(const NostalgiaGraphic &img) noexcept {
void TileSheetGrid::initBufferSet(const common::Vec2 &paneSize, const NostalgiaGraphic &img) noexcept {
// vao
m_bufferSet.vao = glutils::generateVertexArrayObject();
glBindVertexArray(m_bufferSet.vao);
// vbo
m_bufferSet.vbo = glutils::generateBuffer();
setBufferObjects(img, &m_bufferSet);
setBufferObjects(paneSize, img, &m_bufferSet);
glutils::sendVbo(m_bufferSet);
// vbo layout
const auto pt1Attr = static_cast<GLuint>(glGetAttribLocation(m_shader, "vPt1"));
@@ -52,7 +52,7 @@ void TileSheetGrid::initBufferSet(const NostalgiaGraphic &img) noexcept {
reinterpret_cast<void*>(4 * sizeof(float)));
}
void TileSheetGrid::setBufferObject(common::Point pt1, common::Point pt2, Color32 c, float *vbo, const ImVec2 &pixSize) noexcept {
void TileSheetGrid::setBufferObject(common::Point pt1, common::Point pt2, Color32 c, float *vbo, const common::Vec2 &pixSize) noexcept {
const auto x1 = static_cast<float>(pt1.x) * pixSize.x - 1.f;
const auto y1 = 1.f - static_cast<float>(pt1.y) * pixSize.y;
const auto x2 = static_cast<float>(pt2.x) * pixSize.x - 1.f;
@@ -62,8 +62,8 @@ void TileSheetGrid::setBufferObject(common::Point pt1, common::Point pt2, Color3
memcpy(vbo, vertices, sizeof(vertices));
}
void TileSheetGrid::setBufferObjects(const NostalgiaGraphic &img, glutils::BufferSet *bg) noexcept {
const auto pixSize = pixelSize();
void TileSheetGrid::setBufferObjects(const common::Vec2 &paneSize, const NostalgiaGraphic &img, glutils::BufferSet *bg) noexcept {
const auto pixSize = pixelSize(paneSize);
const auto set = [bg, pixSize](unsigned i, common::Point pt1, common::Point pt2, Color32 c) {
const auto vbo = &bg->vertices[i * VertexVboLength];
setBufferObject(pt1, pt2, c, vbo, pixSize);
@@ -98,7 +98,7 @@ void TileSheetGrid::setBufferObjects(const NostalgiaGraphic &img, glutils::Buffe
}
}
ImVec2 TileSheetGrid::pixelSize(const ImVec2 &paneSize) const noexcept {
common::Vec2 TileSheetGrid::pixelSize(const common::Vec2 &paneSize) const noexcept {
const auto [sw, sh] = paneSize;
constexpr float ymod = 0.35f / 10.0f;
const auto xmod = ymod * sh / sw;