Mercurial > mm7
annotate GammaControl.cpp @ 2327:5e4d90305d06
EventCastSpell removing duplicate code for handling empty pObjectList->pObjects array or not finding the correct value + moving everything into the main switch
author | Grumpy7 |
---|---|
date | Tue, 01 Apr 2014 23:20:15 +0200 |
parents | fd788d2e9585 |
children | f4af3b203f65 |
rev | line source |
---|---|
2253
aff7a7b072b7
adding _CRT_SECURE_NO_WARNINGS to get rid of a few hundrer annoying warnings + adding count parameter to swprintf
Grumpy7
parents:
2154
diff
changeset
|
1 #define _CRT_SECURE_NO_WARNINGS |
0 | 2 #include <string> |
3 | |
4 #include "GammaControl.h" | |
5 #include "Render.h" | |
6 | |
7 #include "mm7_data.h" | |
8 | |
9 | |
10 | |
11 //----- (0044F324) -------------------------------------------------------- | |
12 void GammaController::GetRamp() | |
13 { | |
14 if (pGammaControl) | |
15 ErrD3D(pGammaControl->GetGammaRamp(0, &pDefaultRamp)); | |
16 else | |
17 MessageBoxW(nullptr, L"Gamma control not active", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\GammaControl.cpp:83", 0); | |
18 } | |
19 | |
20 //----- (0044F377) -------------------------------------------------------- | |
21 double GammaController::_44F377(DDGAMMARAMP *a1) | |
22 { | |
23 double v2; // st7@1 | |
24 unsigned __int16 *v3; // ecx@1 | |
25 double v4; // st6@2 | |
26 signed int v6; // [sp+0h] [bp-8h]@1 | |
27 signed int v7; // [sp+4h] [bp-4h]@1 | |
28 | |
29 v2 = 0.0; | |
30 v6 = 256; | |
31 v3 = a1->green; | |
2268 | 32 for ( v7 = 0; v7 < 256; ++v7 ) |
0 | 33 { |
34 v4 = ((double)*(v3 - 256) + (double)v3[256] + (double)*v3) * 0.000015259022 * 0.33333334; | |
35 if ( v4 == 0.0 ) | |
36 --v6; | |
37 else | |
38 v2 = v2 + (double)v7 * 0.0039215689 / v4; | |
39 ++v3; | |
40 } | |
41 if ( v6 ) | |
2268 | 42 return v2 / (double)v6; |
0 | 43 else |
2268 | 44 return 1.0; |
0 | 45 } |
46 | |
47 //----- (0044F408) -------------------------------------------------------- | |
48 void GammaController::SetGammaRamp(DDGAMMARAMP *pRamp) | |
49 { | |
50 if (pGammaControl) | |
51 ErrD3D(pGammaControl->SetGammaRamp(0, pRamp)); | |
52 else | |
53 MessageBoxW(nullptr, L"Gamma control not active", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\GammaControl.cpp:120", 0); | |
54 } | |
55 | |
56 //----- (0044F45B) -------------------------------------------------------- | |
57 int GammaController::InitGammaRamp(DDGAMMARAMP *pRamp) | |
58 { | |
59 unsigned __int16 *v2; // esi@1 | |
60 double v3; // st7@2 | |
61 signed __int64 v4; // qax@3 | |
62 signed int v6; // [sp+Ch] [bp-4h]@1 | |
63 | |
64 v2 = pRamp->green; | |
2268 | 65 for ( v6 = 0; v6 < 256; ++v6 ) |
0 | 66 { |
67 v3 = (double)v6 * 0.0039215689 * this->fGamma; | |
68 if ( v3 >= 1.0 || (v4 = (signed __int64)(v3 * 65535.0), (signed int)v4 > 65535) ) | |
2268 | 69 LODWORD(v4) = 65535; |
1421 | 70 else if ( (signed int)v4 < 0 ) |
0 | 71 LODWORD(v4) = 0; |
1421 | 72 else |
73 { | |
0 | 74 if ( (signed int)v4 > 65535 ) |
75 LODWORD(v4) = 65535; | |
1421 | 76 } |
0 | 77 v2[256] = v4; |
78 *v2 = v4; | |
79 *(v2 - 256) = v4; | |
80 ++v2; | |
81 } | |
82 return v4; | |
83 } | |
84 | |
85 //----- (0044F4D9) -------------------------------------------------------- | |
86 void GammaController::Initialize(float gamma) | |
87 { | |
88 double v3; // st7@3 | |
89 double v4; // st6@4 | |
90 | |
2152 | 91 //if (pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || |
92 //pVersion->pVersionInfo.dwMajorVersion != 4) | |
0 | 93 { |
94 InitializeFromSurface(pRenderer->pFrontBuffer4); | |
95 v3 = 2.8; | |
96 if ( gamma <= 2.8f ) | |
97 v4 = gamma; | |
98 else | |
99 v4 = 2.8; | |
100 if ( v4 >= 0.1f ) | |
101 { | |
102 if ( gamma <= 2.8f ) | |
103 v3 = gamma; | |
104 } | |
105 else | |
106 v3 = 0.1; | |
2268 | 107 this->fGamma = v3; |
108 InitGammaRamp(&this->field_60C); | |
109 SetGammaRamp(&this->field_60C); | |
0 | 110 } |
111 } | |
112 | |
113 //----- (0044F215) -------------------------------------------------------- | |
114 GammaController::GammaController() | |
115 { | |
116 static float flt_4D8670_default_gamma = 1.0f; | |
117 | |
118 pGammaControl = nullptr; | |
119 fGamma = flt_4D8670_default_gamma; | |
120 } | |
121 | |
122 //----- (0044F24B) -------------------------------------------------------- | |
123 void GammaController::InitializeFromSurface(IDirectDrawSurface4 *a2) | |
124 { | |
125 this->pSurface = a2; | |
2268 | 126 if ( this->pGammaControl ) |
0 | 127 { |
2268 | 128 this->pGammaControl->Release(); |
129 this->pGammaControl = 0; | |
0 | 130 } |
2154 | 131 if ( pRenderer->IsGammaSupported() ) |
0 | 132 { |
2268 | 133 ErrD3D(a2->QueryInterface(IID_IDirectDrawGammaControl, (LPVOID *)&this->pGammaControl)); |
0 | 134 GetRamp(); |
2268 | 135 memcpy(&this->field_60C, &this->pDefaultRamp, 0x600u); |
136 fGamma = _44F377(&this->field_60C); | |
0 | 137 } |
138 } |