diff options
| author | ModMaker101 <119018978+ModMaker101@users.noreply.github.com> | 2026-03-05 14:41:17 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-06 02:41:17 +0700 |
| commit | cbcf3de358f97ae1f687f3ffa47fcdb910e39bcb (patch) | |
| tree | 35e2e226b669496319c978d026045b0ebe91ef89 /Minecraft.Client/Common/PostProcesser.h | |
| parent | 55231bb8d3e1a4e2752ac3d444c4287eb0ca4e8b (diff) | |
Fix gamma slider via pixel shader #178 (#481)
* Fix gamma slider via pixel shader #178
* LCE-like gamma using postprocess shader
Diffstat (limited to 'Minecraft.Client/Common/PostProcesser.h')
| -rw-r--r-- | Minecraft.Client/Common/PostProcesser.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/PostProcesser.h b/Minecraft.Client/Common/PostProcesser.h new file mode 100644 index 00000000..ab7aedf6 --- /dev/null +++ b/Minecraft.Client/Common/PostProcesser.h @@ -0,0 +1,57 @@ +#pragma once + +#include <d3d11.h> + +class PostProcesser +{ +public: + static PostProcesser& GetInstance() + { + static PostProcesser instance; + return instance; + } + + void Init(); + void Apply() const; + void SetViewport(const D3D11_VIEWPORT& viewport); + void ResetViewport(); + void CopyBackbuffer(); // Copy backbuffer once before multi-pass gamma + void ApplyFromCopied() const; // Apply gamma using already-copied offscreen texture + void Cleanup(); + void SetGamma(float gamma); + float GetGamma() const { return m_gamma; } + PostProcesser(const PostProcesser&) = delete; + PostProcesser& operator=(const PostProcesser&) = delete; + +private: + PostProcesser(); + ~PostProcesser(); + + static bool IsRunningUnderWine(); + + ID3D11Texture2D* m_pGammaOffscreenTex = nullptr; + ID3D11ShaderResourceView* m_pGammaOffscreenSRV = nullptr; + ID3D11RenderTargetView* m_pGammaOffscreenRTV = nullptr; + ID3D11VertexShader* m_pGammaVS = nullptr; + ID3D11PixelShader* m_pGammaPS = nullptr; + ID3D11Buffer* m_pGammaCB = nullptr; + ID3D11SamplerState* m_pGammaSampler = nullptr; + ID3D11RasterizerState* m_pGammaRastState = nullptr; + ID3D11DepthStencilState* m_pGammaDepthState = nullptr; + ID3D11BlendState* m_pGammaBlendState = nullptr; + + bool m_initialized = false; + float m_gamma = 1.0f; + bool m_wineMode = false; + D3D11_VIEWPORT m_customViewport; + bool m_useCustomViewport = false; + + struct GammaCBData + { + float gamma; + float pad[3]; + }; + + static const char* g_gammaVSCode; + static const char* g_gammaPSCode; +};
\ No newline at end of file |
