Editor builds with some render code removed

master
Joey Pollack 3 years ago
parent 225199dfcc
commit 43ac2d1d06

@ -6,6 +6,13 @@
Renderer rewrite:
☐ Re-integrate the new renderer into the editor
✔ Clean up class name differences @done(22-08-30 15:58)
☐ Hook up update and render calls between the core and the editor
☐ Re-write render code in map tools and assets
☐ Tilemap
☐ TileSet
☐ MapCanvas
☐ TileSetView
✔ Add double buffer to the VertexBuffer class with a Flush method to send the verts to the gpu @high @done(22-08-29 15:14)
✔ Add Draw method to the VertexBuffer class @high @done(22-08-29 15:06)
✔ Batch rendering minimally working @done(22-08-12 19:19)

@ -15,7 +15,7 @@
namespace lunarium
{
class IGraphics;
class Renderer2D;
class iRunMode
{
public:

@ -9,7 +9,7 @@
#include "tile_map.h"
#include "tile_set.h"
#include <core/core.h>
#include <graphics/graphics.h>
#include <renderer/renderer2D.h>
#include <editor/editor.h>
#include <utils/logger.h>
@ -142,7 +142,7 @@ namespace lunarium { namespace editor
}
void TileMap::Render(lunarium::IGraphics* g)
void TileMap::Render(lunarium::Renderer2D* g)
{
if (!mpMap)
return;
@ -177,7 +177,9 @@ namespace lunarium { namespace editor
Rectangle dest = Rectangle::MakeFromTopLeft(i * mTileSize.Width, j * mTileSize.Height, mTileSize.Width, mTileSize.Height);
Rectangle src = set->GetTileRect(mpMap[i][j].TileIndex);
g->DrawImage(*set->GetImage(), src, dest, Color::White());
//g->DrawImage(*set->GetImage(), src, dest, Color::White());
// DEBUG
//g->DrawImage(*set->GetImage(), glm::vec2(dest.left(), dest.top()), Color::White());
//g->DrawImage(*set->GetImage(), Rectangle::MakeFromTopLeft(0, 0, 1024, 1024), dest, Color::White());
//g->DrawImage(*set->GetImage(), Rectangle::MakeFromTopLeft(16, 0, 16, 16), Rectangle::MakeFromTopLeft(0, 0, 500, 500), Color::White());
@ -185,16 +187,16 @@ namespace lunarium { namespace editor
}
// Draw grid
for (int i = 0; i < mSizeInTiles.Width; i++)
{
g->DrawLine(glm::vec2(i * mTileSize.Width, 0), glm::vec2(i * mTileSize.Width, map_size_pixels.Height), Color::Black(), 1.0f);
}
g->DrawLine(glm::vec2(map_size_pixels.Width, 0), glm::vec2(map_size_pixels.Width, map_size_pixels.Height), Color::Black(), 1.0f);
for (int j = 0; j < mSizeInTiles.Height; j++)
{
g->DrawLine(glm::vec2(0, j * mTileSize.Height), glm::vec2(map_size_pixels.Width, j * mTileSize.Height), Color::Black(), 1.0f);
}
g->DrawLine(glm::vec2(0, map_size_pixels.Height), glm::vec2(map_size_pixels.Width, map_size_pixels.Height), Color::Black(), 1.0f);
// for (int i = 0; i < mSizeInTiles.Width; i++)
// {
// g->DrawLine(glm::vec2(i * mTileSize.Width, 0), glm::vec2(i * mTileSize.Width, map_size_pixels.Height), Color::Black(), 1.0f);
// }
// g->DrawLine(glm::vec2(map_size_pixels.Width, 0), glm::vec2(map_size_pixels.Width, map_size_pixels.Height), Color::Black(), 1.0f);
// for (int j = 0; j < mSizeInTiles.Height; j++)
// {
// g->DrawLine(glm::vec2(0, j * mTileSize.Height), glm::vec2(map_size_pixels.Width, j * mTileSize.Height), Color::Black(), 1.0f);
// }
// g->DrawLine(glm::vec2(0, map_size_pixels.Height), glm::vec2(map_size_pixels.Width, map_size_pixels.Height), Color::Black(), 1.0f);
}
}}

@ -14,7 +14,7 @@
#include <utils/op_res.h>
#include <map>
namespace lunarium { class IGraphics; }
namespace lunarium { class Renderer2D; }
namespace lunarium { namespace editor
{
@ -40,7 +40,7 @@ namespace lunarium { namespace editor
Sizei GetTileSize();
// Call during render to texture phase
void Render(lunarium::IGraphics* g);
void Render(lunarium::Renderer2D* g);
private:
TileRef** mpMap;

@ -9,7 +9,8 @@
#include "tile_set.h"
#include <editor/editor.h>
#include <editor/editor_helpers.h>
#include <graphics/graphics.h>
#include <renderer/renderer2D.h>
#include <renderer/texture.h>
#include <assets/types/image.h>
#include <utils/logger.h>
#include <nlohmann/json.hpp>
@ -32,7 +33,7 @@ namespace lunarium { namespace editor
// Set some default values
mTileSize = { 16, 16 };
mNumTiles = { mSetImage->GetWidth() / 16, mSetImage->GetHeight() / 16 };
mNumTiles = { (int)mSetImage->GetWidth() / 16, (int)mSetImage->GetHeight() / 16 };
return OpRes::OK();
}
@ -123,7 +124,7 @@ namespace lunarium { namespace editor
return mTileSetID;
}
void TileSet::SetImage(Image* image)
void TileSet::SetImage(lunarium::Texture* image)
{
mSetImage = image;
}
@ -135,7 +136,7 @@ namespace lunarium { namespace editor
mNumTiles.Height = mSetImage->GetHeight() / mTileSize.Height;
}
Image* TileSet::GetImage()
lunarium::Texture* TileSet::GetImage()
{
return mSetImage;
}
@ -150,21 +151,21 @@ namespace lunarium { namespace editor
return Rectangle::MakeFromTopLeft(index.X * mTileSize.Width, index.Y * mTileSize.Height, mTileSize.Width, mTileSize.Height);
}
void TileSet::Render(lunarium::IGraphics* g)
void TileSet::Render(lunarium::Renderer2D* g)
{
g->DrawImage(*mSetImage, glm::vec2(0, 0), Color::White());
// Draw grid
for (int i = 0; i < mNumTiles.Width; i++)
{
g->DrawLine(glm::vec2(i * mTileSize.Width, 0), glm::vec2(i * mTileSize.Width, mSetImage->GetHeight()), Color::Black(), 1.0f);
}
g->DrawLine(glm::vec2(mSetImage->GetWidth(), 0), glm::vec2(mSetImage->GetWidth(), mSetImage->GetHeight()), Color::Black(), 1.0f);
for (int j = 0; j < mNumTiles.Height; j++)
{
g->DrawLine(glm::vec2(0, j * mTileSize.Height), glm::vec2(mSetImage->GetWidth(), j * mTileSize.Height), Color::Black(), 1.0f);
}
g->DrawLine(glm::vec2(0, mSetImage->GetHeight()), glm::vec2(mSetImage->GetWidth(), mSetImage->GetHeight()), Color::Black(), 1.0f);
// g->DrawImage(*mSetImage, glm::vec2(0, 0), Color::White());
// // Draw grid
// for (int i = 0; i < mNumTiles.Width; i++)
// {
// g->DrawLine(glm::vec2(i * mTileSize.Width, 0), glm::vec2(i * mTileSize.Width, mSetImage->GetHeight()), Color::Black(), 1.0f);
// }
// g->DrawLine(glm::vec2(mSetImage->GetWidth(), 0), glm::vec2(mSetImage->GetWidth(), mSetImage->GetHeight()), Color::Black(), 1.0f);
// for (int j = 0; j < mNumTiles.Height; j++)
// {
// g->DrawLine(glm::vec2(0, j * mTileSize.Height), glm::vec2(mSetImage->GetWidth(), j * mTileSize.Height), Color::Black(), 1.0f);
// }
// g->DrawLine(glm::vec2(0, mSetImage->GetHeight()), glm::vec2(mSetImage->GetWidth(), mSetImage->GetHeight()), Color::Black(), 1.0f);
}
}}

@ -13,7 +13,7 @@
#include <core/types.h>
#include <filesystem>
namespace lunarium { class Image; class IGraphics; }
namespace lunarium { class Texture; class Renderer2D; }
namespace lunarium { namespace editor
{
@ -32,17 +32,17 @@ namespace lunarium { namespace editor
void SetTileSetID(int id);
int GetTileSetID() const;
void SetImage(Image* image);
void SetImage(lunarium::Texture* image);
void SetTileSize(Sizei size);
Image* GetImage();
lunarium::Texture* GetImage();
Sizei GetTileSize();
Rectangle GetTileRect(Vec2i index);
void Render(lunarium::IGraphics* g);
void Render(lunarium::Renderer2D* g);
private:
Image* mSetImage;
lunarium::Texture* mSetImage;
Sizei mTileSize; // in pixels, must be a square power of 2
Sizei mNumTiles;
int mTileSetID;

@ -99,7 +99,7 @@ namespace editor
HandleMenuEvents();
}
void Editor::OnRender(lunarium::IGraphics* g)
void Editor::OnRender(lunarium::Renderer2D* g)
{
DoMainMenu();
//DoStatusBar();

@ -46,7 +46,7 @@ namespace lunarium { namespace editor
[[nodiscard]] OpRes Initialize();
void Shutdown();
void OnUpdate(double delta);
void OnRender(lunarium::IGraphics* g);
void OnRender(lunarium::Renderer2D* g);
bool IsToolOpen(ToolType type) const;

@ -17,7 +17,7 @@
#include <editor/contents/content_manager.h>
#include <editor/contents/editor_asset.h>
#include <editor/contents/world.h>
#include <assets/types/image.h>
#include <renderer/texture.h>
namespace lunarium
{
@ -158,7 +158,7 @@ namespace editor
}
ImGui::SameLine();
if (ImGui::ImageButton((ImTextureID)DataManager::mNewFolderIcon->GetGLTextureID64(),
if (ImGui::ImageButton((ImTextureID)DataManager::mNewFolderIcon->GetGLID64(),
ImVec2(DataManager::mNewFolderIcon->GetWidth(), DataManager::mNewFolderIcon->GetHeight()),
ImVec2(0, 0), ImVec2(1, 1), 4))
{
@ -175,7 +175,7 @@ namespace editor
{
if (dir_entry.is_directory())
{
ImGui::Image((ImTextureID)DataManager::mFolderIcon->GetGLTextureID64(),
ImGui::Image((ImTextureID)DataManager::mFolderIcon->GetGLID64(),
ImVec2(DataManager::mFolderIcon->GetWidth(), DataManager::mFolderIcon->GetHeight()));
ImGui::SameLine();
ImGui::Selectable(dir_entry.path().filename().string().c_str());

@ -8,8 +8,10 @@
#include "world_view.h"
#include <core/core.h>
#include <graphics/graphics.h>
#include <assets/types/image.h>
#include <renderer/renderer2D.h>
#include <renderer/frame_buffer.h>
#include <renderer/texture.h>
#include <renderer/orthographic_camera.h>
#include <utils/logger.h>
#include <world/world.h>
#include <dearimgui/imgui.h>
@ -20,7 +22,7 @@ namespace lunarium { namespace editor
{
WorldView::WorldView()
: Panel("World View", PanelDockZone::DDZ_CENTER, true, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar), mpWorld(nullptr),
mFrameBuffer(-1), mPrevWidth(0), mPrevHeight(0), mpCanvasImage(nullptr)
mFrameBuffer(nullptr), mPrevWidth(0), mPrevHeight(0), mpCanvasImage(nullptr), mCamera(nullptr)
{
}
@ -36,12 +38,14 @@ namespace lunarium { namespace editor
mPrevWidth = width;
mPrevHeight = height;
if (mFrameBuffer > -1)
if (mFrameBuffer)
{
Core::Graphics().DestroyRenderTexture(mFrameBuffer);
FrameBuffer::Destroy(&mFrameBuffer);
delete mCamera;
}
mFrameBuffer = Core::Graphics().CreateRenderTexture(width, height, 4);
mFrameBuffer = FrameBuffer::Create(width, height);
mCamera = new OrthographicCamera({ 0.0f, 0.0f }, { (float)width, (float)height });
}
// TODO: Handle view navigation input
@ -49,9 +53,12 @@ namespace lunarium { namespace editor
// Render the current state of the world
if (mpWorld)
{
Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
mFrameBuffer->Bind();
Core::Graphics().BeginDraw(mCamera);
mpWorld->Render(&Core::Graphics());
mpCanvasImage = Core::GetInstance().EndRenderToTexture();
Core::Graphics().EndDraw();
mFrameBuffer->Unbind();
mpCanvasImage = mFrameBuffer->GetTexture();
}
}
@ -62,7 +69,7 @@ namespace lunarium { namespace editor
// Draw world render
if (mpCanvasImage)
{
ImGui::Image((ImTextureID)mpCanvasImage->GetGLTextureID64(),
ImGui::Image((ImTextureID)mpCanvasImage->GetGLID64(),
ImVec2(mpCanvasImage->GetWidth(), mpCanvasImage->GetHeight()), ImVec2(0, 1), ImVec2(1, 0));
}
}

@ -13,8 +13,10 @@
namespace lunarium
{
class Image;
class World;
class Texture;
class World;
class FrameBuffer;
class OrthographicCamera;
namespace editor
{
@ -35,8 +37,9 @@ namespace editor
Editor* mpEditor;
int mPrevWidth;
int mPrevHeight;
int mFrameBuffer;
Image* mpCanvasImage;
lunarium::FrameBuffer* mFrameBuffer;
lunarium::OrthographicCamera* mCamera;
lunarium::Texture* mpCanvasImage;
};
}} // lunarium::editor

@ -9,7 +9,7 @@
#include "map_editor.h"
#include <core/core.h>
#include <graphics/graphics.h>
#include <renderer/renderer2D.h>
#include <assets/types/image.h>
#include <editor/editor.h>
#include <gui/panel.h>
@ -87,7 +87,7 @@ namespace lunarium { namespace editor
mPanelManager.OnTick(delta);
}
bool MapEditor::OnRender(lunarium::IGraphics* g)
bool MapEditor::OnRender(lunarium::Renderer2D* g)
{
if (!mIsOpen)
{

@ -17,7 +17,7 @@
#include <editor/contents/definitions.h>
namespace lunarium {
class IGraphics;
class Renderer2D;
namespace gui {
class Panel;
@ -36,7 +36,7 @@ namespace editor
OpRes Initialize(Editor* editor);
void Shutdown();
void OnTick(double delta);
bool OnRender(lunarium::IGraphics* g);
bool OnRender(lunarium::Renderer2D* g);
void Open();
void Close();

@ -12,8 +12,8 @@
#include <editor/contents/tile_map.h>
#include <dearimgui/imgui.h>
#include <core/core.h>
#include <graphics/graphics.h>
#include <assets/types/image.h>
#include <renderer/renderer2D.h>
#include <renderer/texture.h>
#include <string>
#include <sstream>
@ -109,22 +109,22 @@ namespace lunarium { namespace editor
{
if (mMapSizeChanged)
{
Core::Graphics().DestroyRenderTexture(mFrameBuffer);
//Core::Graphics().DestroyRenderTexture(mFrameBuffer);
mFrameBuffer = -1;
mMapSizeChanged = false;
}
if (mFrameBuffer == -1)
{
mFrameBuffer = Core::Graphics().CreateRenderTexture(mMap->GetSizeInPixels().Width, mMap->GetSizeInPixels().Height, 4);
//mFrameBuffer = Core::Graphics().CreateRenderTexture(mMap->GetSizeInPixels().Width, mMap->GetSizeInPixels().Height, 4);
}
Color prev = Core::Graphics().GetClearColor();
Core::Graphics().SetClearColor(Color::Transparent());
Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
mMap->Render(&Core::Graphics());
mpCanvasImage = Core::GetInstance().EndRenderToTexture();
Core::Graphics().SetClearColor(prev);
// Color prev = Core::Graphics().GetClearColor();
// Core::Graphics().SetClearColor(Color::Transparent());
// Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
// mMap->Render(&Core::Graphics());
// mpCanvasImage = Core::GetInstance().EndRenderToTexture();
// Core::Graphics().SetClearColor(prev);
}
}
}
@ -178,7 +178,7 @@ namespace lunarium { namespace editor
//ImGui::Text(mMouseStatusInfo.c_str());
if (mpCanvasImage)
{
ImGui::Image((ImTextureID)mpCanvasImage->GetGLTextureID64(),
ImGui::Image((ImTextureID)mpCanvasImage->GetGLID64(),
ImVec2(mpCanvasImage->GetWidth() * mZoomFactor, mpCanvasImage->GetHeight() * mZoomFactor), ImVec2(0, 1), ImVec2(1, 0));
}

@ -13,7 +13,7 @@
#include <editor/contents/definitions.h>
#include <string>
namespace lunarium { class Image; class IGraphics; }
namespace lunarium { class Texture; class Renderer2D; }
namespace lunarium { namespace editor
{
@ -46,7 +46,7 @@ namespace lunarium { namespace editor
float mZoomFactor;
std::string mMouseStatusInfo;
int mFrameBuffer;
Image* mpCanvasImage;
lunarium::Texture* mpCanvasImage;
TileMap* mMap; // TODO: Replace with a World
TileRef mSelectedTile;
bool mMapSizeChanged;

@ -12,7 +12,8 @@
#include <assets/types/image.h>
#include <editor/editor.h>
#include <core/core.h>
#include <graphics/graphics.h>
#include <renderer/renderer2D.h>
#include <renderer/frame_buffer.h>
#include <sstream>
#include <utils/stb/std_image_write.h>
@ -21,7 +22,7 @@ namespace lunarium { namespace editor
{
TileSetView::TileSetView(MapEditor* editor)
: Panel("Tile Set View", PanelDockZone::DDZ_RIGHT, true, ImGuiWindowFlags_HorizontalScrollbar),
mpEditor(editor), mpSelectedTileSet(nullptr), mpViewImage(nullptr), mFrameBuffer(-1),
mpEditor(editor), mpSelectedTileSet(nullptr), mpViewImage(nullptr), mFrameBuffer(nullptr),
mViewOffset({0, 0}), mViewZoom(1.0f), mMouseDown(false)
{
@ -68,26 +69,28 @@ namespace lunarium { namespace editor
{
if (mpSelectedTileSet)
{
if (mFrameBuffer == -1)
if (!mFrameBuffer)
{
mFrameBuffer = Core::Graphics().CreateRenderTexture(mpSelectedTileSet->GetImage()->GetWidth(), mpSelectedTileSet->GetImage()->GetHeight(), 4);
mFrameBuffer = FrameBuffer::Create(mpSelectedTileSet->GetImage()->GetWidth(), mpSelectedTileSet->GetImage()->GetHeight());
}
Color prev = Core::Graphics().GetClearColor();
Core::Graphics().SetClearColor(Color::Transparent());
Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
// Color prev = Core::Graphics().GetClearColor();
// Core::Graphics().SetClearColor(Color::Transparent());
// Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
mpSelectedTileSet->Render(&Core::Graphics());
// mpSelectedTileSet->Render(&Core::Graphics());
// Draw selected tile highlight
if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0)
{
Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile);
Core::Graphics().DrawBox(selection, Color::Red(), 1.5f);
}
// // Draw selected tile highlight
// if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0)
// {
// Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile);
// Core::Graphics().DrawBox(selection, Color::Red(), 1.5f);
// }
// mpViewImage = Core::GetInstance().EndRenderToTexture();
// Core::Graphics().SetClearColor(prev);
mpViewImage = Core::GetInstance().EndRenderToTexture();
Core::Graphics().SetClearColor(prev);
// //stbi_flip_vertically_on_write(1);
// stbi_write_png("tileset_test_image.png", mpViewImage->GetWidth(), mpViewImage->GetHeight(), 4,
@ -150,7 +153,7 @@ namespace lunarium { namespace editor
if (mpViewImage)
{
ImGui::Image((ImTextureID)mpViewImage->GetGLTextureID64(),
ImGui::Image((ImTextureID)mpViewImage->GetGLID64(),
ImVec2(mpViewImage->GetWidth(), mpViewImage->GetHeight()), ImVec2(0, 1), ImVec2(1, 0)); // the last 2 params are flipping the image on the y
}
}
@ -188,10 +191,9 @@ namespace lunarium { namespace editor
void TileSetView::Invalidate(bool remake_frame_buffer)
{
mInvalidate = true;
if (remake_frame_buffer && mFrameBuffer != -1)
if (remake_frame_buffer && mFrameBuffer)
{
Core::Graphics().DestroyRenderTexture(mFrameBuffer);
mFrameBuffer = -1;
FrameBuffer::Destroy(&mFrameBuffer);
}
}
}}

@ -14,7 +14,7 @@
#include <utils/high_resolution_timer.h>
#include <map>
namespace lunarium { class Image; }
namespace lunarium { class Texture; class FrameBuffer; }
namespace lunarium { namespace editor
{
@ -41,9 +41,9 @@ namespace lunarium { namespace editor
MapEditor* mpEditor;
std::map<int, TileSet*> mTileSets;
TileSet* mpSelectedTileSet;
int mFrameBuffer;
lunarium::FrameBuffer* mFrameBuffer;
bool mInvalidate;
Image* mpViewImage;
lunarium::Texture* mpViewImage;
Vec2i mViewOffset;
float mViewZoom;
Vec2i mSelectedTile;

@ -13,6 +13,7 @@
#include <utils/logger.h>
#include <assets/types/script.h>
#include <assets/types/image.h>
#include <renderer/renderer2D.h>
#include <renderer/orthographic_camera.h>
#include "entity.h"
@ -45,7 +46,7 @@ namespace lunarium
// TODO: Update all entities
}
void World::Render(lunarium::IGraphics* pGraphics) const
void World::Render(lunarium::Renderer2D* pGraphics) const
{
OrthographicCamera* pCam = mpActiveCamera;

@ -23,7 +23,7 @@
namespace lunarium
{
class IGraphics;
class Renderer2D;
class Image;
class Script;
class OrthographicCamera;
@ -59,7 +59,7 @@ namespace lunarium
void OnLoad();
void OnUnload();
void Update(float dt);
void Render(lunarium::IGraphics* pGraphics) const;
void Render(lunarium::Renderer2D* pGraphics) const;
void SetActiveCamera(OrthographicCamera* pCam);

@ -2,7 +2,7 @@
"State":
{
"DataDirectory": "data/",
"Mode": "test",
"Mode": "editor",
"Display":
{

Loading…
Cancel
Save