Files
INF6B/simulations/mandelbrotset/cpp/mandelbrot_app.h
rattatwinko d0eaabdd87 some new stuff.
idk its all pretty fun! some C++ too!
2025-10-15 11:16:51 +02:00

91 lines
2.3 KiB
C++

#ifndef MANDELBROT_APP_H
#define MANDELBROT_APP_H
#include <windows.h>
#include <d3d11.h>
#include <d3dcompiler.h>
#include <wrl/client.h>
#include <unordered_map>
#include <mutex>
#include <string>
using Microsoft::WRL::ComPtr;
struct ConstantBuffer {
float xmin, xmax, ymin, ymax;
int width, height, maxIter;
float time;
float padding[3];
};
struct Bookmark {
double xmin, xmax, ymin, ymax;
int maxIter;
bool saved = false;
};
class MandelbrotApp {
public:
MandelbrotApp(HINSTANCE hInstance);
~MandelbrotApp();
void Run();
private:
void CreateMainWindow();
void InitD3D();
void CreateComputeShader();
void ResizeBuffers(int width, int height);
void RenderMandelbrot();
void UpdateTitle();
void Zoom(double factor, int centerX, int centerY);
void Pan(int dx, int dy);
void ResetView();
void AdjustIterations(int delta);
void CycleColorScheme();
void ToggleAnimation();
void SaveBookmark();
void LoadBookmark(int slot);
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
LRESULT HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE hInstance_;
HWND hwnd_;
ComPtr<ID3D11Device> device_;
ComPtr<ID3D11DeviceContext> context_;
ComPtr<IDXGISwapChain> swapChain_;
ComPtr<ID3D11RenderTargetView> renderTargetView_;
ComPtr<ID3D11ComputeShader> computeShader_;
ComPtr<ID3D11VertexShader> vertexShader_;
ComPtr<ID3D11PixelShader> pixelShader_;
ComPtr<ID3D11Buffer> constantBuffer_;
ComPtr<ID3D11Texture2D> outputTexture_;
ComPtr<ID3D11UnorderedAccessView> outputUAV_;
ComPtr<ID3D11ShaderResourceView> outputSRV_;
ComPtr<ID3D11SamplerState> samplerState_;
double xmin_ = -2.5, xmax_ = 1.5;
double ymin_ = -1.5, ymax_ = 1.5;
int maxIter_ = 256;
int colorScheme_ = 0;
bool animationEnabled_ = false;
float animTime_ = 0.0f;
int imageWidth_ = 0;
int imageHeight_ = 0;
int lastMouseX_ = 0;
int lastMouseY_ = 0;
bool dragging_ = false;
bool rightDragging_ = false;
std::unordered_map<WPARAM, bool> keysPressed_;
std::mutex viewMutex_;
LARGE_INTEGER perfFreq_;
LARGE_INTEGER lastFrameTime_;
Bookmark bookmarks_[10];
};
#endif