Editor builds with some render code removed

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

@ -6,6 +6,13 @@
Renderer rewrite: Renderer rewrite:
☐ Re-integrate the new renderer into the editor ☐ 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 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) ✔ Add Draw method to the VertexBuffer class @high @done(22-08-29 15:06)
✔ Batch rendering minimally working @done(22-08-12 19:19) ✔ Batch rendering minimally working @done(22-08-12 19:19)

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

@ -9,7 +9,7 @@
#include "tile_map.h" #include "tile_map.h"
#include "tile_set.h" #include "tile_set.h"
#include <core/core.h> #include <core/core.h>
#include <graphics/graphics.h> #include <renderer/renderer2D.h>
#include <editor/editor.h> #include <editor/editor.h>
#include <utils/logger.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) if (!mpMap)
return; return;
@ -177,7 +177,9 @@ namespace lunarium { namespace editor
Rectangle dest = Rectangle::MakeFromTopLeft(i * mTileSize.Width, j * mTileSize.Height, mTileSize.Width, mTileSize.Height); Rectangle dest = Rectangle::MakeFromTopLeft(i * mTileSize.Width, j * mTileSize.Height, mTileSize.Width, mTileSize.Height);
Rectangle src = set->GetTileRect(mpMap[i][j].TileIndex); 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(), 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(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()); //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 // Draw grid
for (int i = 0; i < mSizeInTiles.Width; i++) // 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(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); // 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++) // 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, 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); // 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 <utils/op_res.h>
#include <map> #include <map>
namespace lunarium { class IGraphics; } namespace lunarium { class Renderer2D; }
namespace lunarium { namespace editor namespace lunarium { namespace editor
{ {
@ -40,7 +40,7 @@ namespace lunarium { namespace editor
Sizei GetTileSize(); Sizei GetTileSize();
// Call during render to texture phase // Call during render to texture phase
void Render(lunarium::IGraphics* g); void Render(lunarium::Renderer2D* g);
private: private:
TileRef** mpMap; TileRef** mpMap;

@ -9,7 +9,8 @@
#include "tile_set.h" #include "tile_set.h"
#include <editor/editor.h> #include <editor/editor.h>
#include <editor/editor_helpers.h> #include <editor/editor_helpers.h>
#include <graphics/graphics.h> #include <renderer/renderer2D.h>
#include <renderer/texture.h>
#include <assets/types/image.h> #include <assets/types/image.h>
#include <utils/logger.h> #include <utils/logger.h>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
@ -32,7 +33,7 @@ namespace lunarium { namespace editor
// Set some default values // Set some default values
mTileSize = { 16, 16 }; mTileSize = { 16, 16 };
mNumTiles = { mSetImage->GetWidth() / 16, mSetImage->GetHeight() / 16 }; mNumTiles = { (int)mSetImage->GetWidth() / 16, (int)mSetImage->GetHeight() / 16 };
return OpRes::OK(); return OpRes::OK();
} }
@ -123,7 +124,7 @@ namespace lunarium { namespace editor
return mTileSetID; return mTileSetID;
} }
void TileSet::SetImage(Image* image) void TileSet::SetImage(lunarium::Texture* image)
{ {
mSetImage = image; mSetImage = image;
} }
@ -135,7 +136,7 @@ namespace lunarium { namespace editor
mNumTiles.Height = mSetImage->GetHeight() / mTileSize.Height; mNumTiles.Height = mSetImage->GetHeight() / mTileSize.Height;
} }
Image* TileSet::GetImage() lunarium::Texture* TileSet::GetImage()
{ {
return mSetImage; 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); 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()); // g->DrawImage(*mSetImage, glm::vec2(0, 0), Color::White());
// Draw grid // // Draw grid
for (int i = 0; i < mNumTiles.Width; i++) // 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(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); // 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++) // 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, 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->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 <core/types.h>
#include <filesystem> #include <filesystem>
namespace lunarium { class Image; class IGraphics; } namespace lunarium { class Texture; class Renderer2D; }
namespace lunarium { namespace editor namespace lunarium { namespace editor
{ {
@ -32,17 +32,17 @@ namespace lunarium { namespace editor
void SetTileSetID(int id); void SetTileSetID(int id);
int GetTileSetID() const; int GetTileSetID() const;
void SetImage(Image* image); void SetImage(lunarium::Texture* image);
void SetTileSize(Sizei size); void SetTileSize(Sizei size);
Image* GetImage(); lunarium::Texture* GetImage();
Sizei GetTileSize(); Sizei GetTileSize();
Rectangle GetTileRect(Vec2i index); Rectangle GetTileRect(Vec2i index);
void Render(lunarium::IGraphics* g); void Render(lunarium::Renderer2D* g);
private: private:
Image* mSetImage; lunarium::Texture* mSetImage;
Sizei mTileSize; // in pixels, must be a square power of 2 Sizei mTileSize; // in pixels, must be a square power of 2
Sizei mNumTiles; Sizei mNumTiles;
int mTileSetID; int mTileSetID;

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

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

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

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

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

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

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

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

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

@ -12,7 +12,8 @@
#include <assets/types/image.h> #include <assets/types/image.h>
#include <editor/editor.h> #include <editor/editor.h>
#include <core/core.h> #include <core/core.h>
#include <graphics/graphics.h> #include <renderer/renderer2D.h>
#include <renderer/frame_buffer.h>
#include <sstream> #include <sstream>
#include <utils/stb/std_image_write.h> #include <utils/stb/std_image_write.h>
@ -21,7 +22,7 @@ namespace lunarium { namespace editor
{ {
TileSetView::TileSetView(MapEditor* editor) TileSetView::TileSetView(MapEditor* editor)
: Panel("Tile Set View", PanelDockZone::DDZ_RIGHT, true, ImGuiWindowFlags_HorizontalScrollbar), : 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) mViewOffset({0, 0}), mViewZoom(1.0f), mMouseDown(false)
{ {
@ -68,26 +69,28 @@ namespace lunarium { namespace editor
{ {
if (mpSelectedTileSet) 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(); // Color prev = Core::Graphics().GetClearColor();
Core::Graphics().SetClearColor(Color::Transparent()); // Core::Graphics().SetClearColor(Color::Transparent());
Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat); // Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
mpSelectedTileSet->Render(&Core::Graphics()); // mpSelectedTileSet->Render(&Core::Graphics());
// Draw selected tile highlight // // Draw selected tile highlight
if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0) // if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0)
{ // {
Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile); // Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile);
Core::Graphics().DrawBox(selection, Color::Red(), 1.5f); // 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_flip_vertically_on_write(1);
// stbi_write_png("tileset_test_image.png", mpViewImage->GetWidth(), mpViewImage->GetHeight(), 4, // stbi_write_png("tileset_test_image.png", mpViewImage->GetWidth(), mpViewImage->GetHeight(), 4,
@ -150,7 +153,7 @@ namespace lunarium { namespace editor
if (mpViewImage) 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 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) void TileSetView::Invalidate(bool remake_frame_buffer)
{ {
mInvalidate = true; mInvalidate = true;
if (remake_frame_buffer && mFrameBuffer != -1) if (remake_frame_buffer && mFrameBuffer)
{ {
Core::Graphics().DestroyRenderTexture(mFrameBuffer); FrameBuffer::Destroy(&mFrameBuffer);
mFrameBuffer = -1;
} }
} }
}} }}

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

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

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

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

Loading…
Cancel
Save