ObsidianDragon - DragonX ImGui Wallet

Full-node GUI wallet for DragonX cryptocurrency.
Built with Dear ImGui, SDL3, and OpenGL3/DX11.

Features:
- Send/receive shielded and transparent transactions
- Autoshield with merged transaction display
- Built-in CPU mining (xmrig)
- Peer management and network monitoring
- Wallet encryption with PIN lock
- QR code generation for receive addresses
- Transaction history with pagination
- Console for direct RPC commands
- Cross-platform (Linux, Windows)
This commit is contained in:
2026-02-26 02:31:52 -06:00
commit 3aee55b49c
306 changed files with 177789 additions and 0 deletions

108
src/platform/dx11_context.h Normal file
View File

@@ -0,0 +1,108 @@
// DragonX Wallet - ImGui Edition
// Copyright 2024-2026 The Hush Developers
// Released under the GPLv3
// DirectX 11 Rendering Context for Windows
// Uses DXGI swap chain with premultiplied alpha + DirectComposition
// for true per-pixel transparency with DWM Mica/Acrylic backdrops.
#pragma once
#ifdef _WIN32
#include <d3d11.h>
#include <dxgi1_2.h>
#include <cstdio>
// Forward declarations - DirectComposition interfaces
struct IDCompositionDevice;
struct IDCompositionTarget;
struct IDCompositionVisual;
struct SDL_Window;
namespace dragonx {
namespace platform {
class DX11Context {
public:
DX11Context() = default;
~DX11Context() { shutdown(); }
// Non-copyable
DX11Context(const DX11Context&) = delete;
DX11Context& operator=(const DX11Context&) = delete;
/**
* @brief Initialize D3D11 device and DXGI swap chain with alpha support
* @param window SDL window to create the swap chain for
* @return true on success
*/
bool init(SDL_Window* window);
/**
* @brief Shut down and release all D3D11/DXGI resources
*/
void shutdown();
/**
* @brief Resize the swap chain buffers (call on window resize)
* @param width New width (0 = auto-detect from swap chain)
* @param height New height (0 = auto-detect from swap chain)
*/
void resize(int width, int height);
/**
* @brief Ensure swap chain matches the current HWND client size.
* Call once per frame to guarantee the buffers stay in sync.
* No-op if the sizes already match.
*/
void ensureSize();
/**
* @brief Clear the render target with a color
* @param r Red (0-1)
* @param g Green (0-1)
* @param b Blue (0-1)
* @param a Alpha (0-1), 0 = fully transparent for DWM
*/
void clear(float r, float g, float b, float a);
/**
* @brief Present the frame (swap buffers)
* @param vsync 1 = vsync on, 0 = vsync off
*/
void present(int vsync = 1);
/** @brief Whether premultiplied alpha compositing is active */
bool hasAlphaCompositing() const { return hasAlpha_; }
// Accessors
ID3D11Device* device() const { return device_; }
ID3D11DeviceContext* deviceContext() const { return deviceContext_; }
ID3D11RenderTargetView* renderTargetView() const { return renderTargetView_; }
IDXGISwapChain1* swapChain() const { return swapChain_; }
private:
void createRenderTarget();
void cleanupRenderTarget();
// D3D11 core
ID3D11Device* device_ = nullptr;
ID3D11DeviceContext* deviceContext_ = nullptr;
IDXGISwapChain1* swapChain_ = nullptr;
ID3D11RenderTargetView* renderTargetView_ = nullptr;
// DirectComposition (for premultiplied alpha swap chain presentation)
IDCompositionDevice* dcompDevice_ = nullptr;
IDCompositionTarget* dcompTarget_ = nullptr;
IDCompositionVisual* dcompVisual_ = nullptr;
bool hasAlpha_ = false;
HWND hwnd_ = nullptr;
};
} // namespace platform
} // namespace dragonx
#endif // _WIN32