mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-05-18 19:31:17 +03:00
125 lines
4.6 KiB
C#
125 lines
4.6 KiB
C#
using System.Numerics;
|
|
using ImGuiNET;
|
|
using NResUI.Abstractions;
|
|
using NResUI.Models;
|
|
using Silk.NET.OpenGL;
|
|
|
|
namespace NResUI.ImGuiUI;
|
|
|
|
public class TexmExplorer : IImGuiPanel
|
|
{
|
|
private readonly TexmExplorerViewModel _viewModel;
|
|
private readonly GL _openGl;
|
|
|
|
public TexmExplorer(TexmExplorerViewModel viewModel, GL openGl)
|
|
{
|
|
_viewModel = viewModel;
|
|
_openGl = openGl;
|
|
}
|
|
|
|
public void OnImGuiRender()
|
|
{
|
|
if (ImGui.Begin("TEXM Explorer"))
|
|
{
|
|
if (!_viewModel.HasFile)
|
|
{
|
|
ImGui.Text("No TEXM opened");
|
|
}
|
|
else
|
|
{
|
|
if (_viewModel.TexmFile is not null)
|
|
{
|
|
ImGui.Text("File: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.Path);
|
|
|
|
ImGui.Text("Header: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.TexmAscii);
|
|
|
|
ImGui.Text("Width: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Width.ToString());
|
|
|
|
ImGui.Text("Height: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Height.ToString());
|
|
|
|
ImGui.Text("MipMap Count: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.MipmapCount.ToString());
|
|
|
|
ImGui.Text("Stride: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Stride.ToString());
|
|
|
|
ImGui.Text("Magic1 (possibly ddsCaps): ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Magic1.ToString());
|
|
|
|
ImGui.Text("Magic2: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Magic2.ToString());
|
|
|
|
ImGui.Text("Format: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.Header.Format.ToString());
|
|
|
|
ImGui.Text("IsIndexed: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(_viewModel.TexmFile.IsIndexed.ToString());
|
|
|
|
ImGui.Checkbox("Включить чёрный фон", ref _viewModel.IsBlackBgEnabled);
|
|
ImGui.SameLine();
|
|
ImGui.Checkbox("Включить белый фон", ref _viewModel.IsWhiteBgEnabled);
|
|
ImGui.SameLine();
|
|
ImGui.Checkbox("Увеличить в 2 раза", ref _viewModel.DoubleSize);
|
|
|
|
if (_viewModel is {IsWhiteBgEnabled: true, IsBlackBgEnabled: true})
|
|
{
|
|
_viewModel.IsBlackBgEnabled = false;
|
|
_viewModel.IsWhiteBgEnabled = false;
|
|
}
|
|
|
|
_viewModel.GenerateGlTextures(_openGl);
|
|
|
|
var drawList = ImGui.GetWindowDrawList();
|
|
for (var index = 0; index < _viewModel.GlTextures.Count; index++)
|
|
{
|
|
var glTexture = _viewModel.GlTextures[index];
|
|
var screenPos = ImGui.GetCursorScreenPos();
|
|
Vector2 imageSize = new Vector2(glTexture.Width, glTexture.Height);
|
|
if (_viewModel.DoubleSize)
|
|
{
|
|
imageSize *= 2;
|
|
}
|
|
|
|
if (_viewModel.IsBlackBgEnabled)
|
|
{
|
|
drawList.AddRectFilled(screenPos, screenPos + imageSize, 0xFF000000);
|
|
}
|
|
else if (_viewModel.IsWhiteBgEnabled)
|
|
{
|
|
drawList.AddRectFilled(screenPos, screenPos + imageSize, 0xFFFFFFFF);
|
|
}
|
|
|
|
ImGui.Image((IntPtr) glTexture.GlTexture, imageSize);
|
|
ImGui.SameLine();
|
|
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
var mousePos = ImGui.GetMousePos();
|
|
var relativePos = (mousePos - screenPos) / (_viewModel.DoubleSize ? 2 : 1);
|
|
|
|
ImGui.Text("Hovering over: ");
|
|
ImGui.SameLine();
|
|
ImGui.Text(relativePos.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ImGui.End();
|
|
}
|
|
}
|
|
} |