2024-01-31 14:41:23 +08:00

96 lines
3.1 KiB
C++

#include "imgui.h"
#include "application/application.h"
#include "rhi/renderer.h"
#include "rhi/texture.h"
#include "ShaderWriter/ShaderWriterPrerequisites.hpp"
#include "ShaderWriter/VertexWriter.hpp"
#include "ShaderWriter/CompositeTypes/MixedStructHelper.hpp"
#include "ShaderWriter/CompositeTypes/IOStructInstanceHelper.hpp"
template< sdw::var::Flag FlagT >
using PosColStructT = sdw::IOStructInstanceHelperT<FlagT
, "PosCol"
, sdw::IOStructFieldT< sdw::Vec4, "position", 0u>
, sdw::IOStructFieldT< sdw::Vec4, "colour", 1u>>;
template< sdw::var::Flag FlagT >
struct PosColT : public PosColStructT<FlagT>
{
PosColT(sdw::ShaderWriter& writer, sdw::expr::ExprPtr expr, bool enabled = true) : PosColStructT<FlagT>{ writer, std::move(expr), enabled }
{
}
auto position()const { return this->getMember<"position">(); }
auto colour()const { return this->getMember<"colour">(); }
};
class arona_application : public application
{
public:
~arona_application() override
{
delete texture_;
}
void draw_gui() override
{
ImGuiIO& io = ImGui::GetIO();
{
static float f = 0.0f;
static int counter = 0;
ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it.
ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too)
ImGui::Checkbox("Another Window", &show_another_window_);
ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f
if (ImGui::Button("按钮")) // Buttons return true when clicked (most widgets return true when edited/activated)
counter++;
ImGui::SameLine();
ImGui::Text("counter = %d", counter);
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
texture_->draw();
ImGui::End();
}
}
void init_imgui(ImGuiContext* in_context) override
{
ImGui::SetCurrentContext(in_context);
}
void post_init()
{
texture_ = load_texture(R"(\\192.168.1.104\nas\NanakoDisk\可爱二次元\61280855_p9_waifu2x_art_noise2_scale.png)");
using namespace sdw;
VertexWriter writer;
writer.implementMainT<PosColT, PosColT>( [&](VertexInT<PosColT> in, VertexOutT<PosColT> out)
{
out.colour() = in.colour();
out.position() = in.position();
out.vtx.position = in.position();
} );
renderer_->compile_shader(&writer);
}
private:
bool show_another_window_ = true;
texture* texture_ = nullptr;
};
int main(int argc, char* argv[])
{
arona_application app;
window_params params = {};
params.title = "Hello World";
params.width = 1280;
params.height = 720;
params.hi_dpi = true;
params.resizable = true;
app.init(params, argc, argv);
app.post_init();
return app.run();
}