Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-rice/src/OGLCombinerNV.h
2 views
1
/*
2
Copyright (C) 2003 Rice1964
3
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
13
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
*/
18
19
#ifndef _OGL_COMBINER_NV_H_
20
#define _OGL_COMBINER_NV_H_
21
22
#include <vector>
23
24
#include <SDL_opengl.h>
25
26
#include "OGLExtCombiner.h"
27
#include "OGLDecodedMux.h"
28
29
typedef struct {
30
uint8 a;
31
uint8 b;
32
uint8 c;
33
uint8 d;
34
} NVGeneralCombinerType;
35
36
typedef struct {
37
uint8 a;
38
uint8 b;
39
uint8 c;
40
uint8 d;
41
uint8 e;
42
uint8 f;
43
uint8 g;
44
} NVFinalCombinerType;
45
46
typedef struct {
47
GLenum variable;
48
GLenum input;
49
GLenum mapping;
50
GLenum componentUsage;
51
} NVCombinerInputType;
52
53
typedef struct {
54
GLenum abOutput;
55
GLenum cdOutput;
56
GLenum sumOutput;
57
GLenum scale;
58
GLenum bias;
59
GLboolean abDotProduct;
60
GLboolean cdDotProduct;
61
GLboolean muxSum;
62
} NVCombinerOutputType;
63
64
65
typedef struct {
66
union {
67
struct {
68
NVGeneralCombinerType s1rgb;
69
NVGeneralCombinerType s1alpha;
70
NVGeneralCombinerType s2rgb;
71
NVGeneralCombinerType s2alpha;
72
NVFinalCombinerType finalrgb;
73
NVFinalCombinerType finalalpha;
74
};
75
struct {
76
NVGeneralCombinerType generalCombiners[4];
77
NVFinalCombinerType finalCombiners[2];
78
};
79
};
80
int stagesUsed;
81
uint8 constant0;
82
uint8 constant1;
83
} NVRegisterCombinerParserType;
84
85
typedef struct {
86
NVCombinerInputType stage1RGB[4];
87
NVCombinerInputType stage1Alpha[4];
88
NVCombinerOutputType stage1outputRGB;
89
NVCombinerOutputType stage1outputAlpha;
90
91
NVCombinerInputType stage2RGB[4];
92
NVCombinerInputType stage2Alpha[4];
93
NVCombinerOutputType stage2outputRGB;
94
NVCombinerOutputType stage2outputAlpha;
95
96
NVCombinerInputType finalStage[7];
97
98
int numOfStages;
99
100
uint32 dwMux0;
101
uint32 dwMux1;
102
103
uint8 constant0;
104
uint8 constant1;
105
#ifdef DEBUGGER
106
NVRegisterCombinerParserType parseResult;
107
#endif
108
} NVRegisterCombinerSettingType;
109
110
class COGLColorCombinerNvidia : public COGLColorCombiner4
111
{
112
public:
113
bool Initialize(void);
114
void InitCombinerBlenderForSimpleTextureDraw(uint32 tile=0);
115
protected:
116
friend class OGLDeviceBuilder;
117
118
void InitCombinerCycle12(void);
119
void DisableCombiner(void);
120
void InitCombinerCycleCopy(void);
121
void InitCombinerCycleFill(void);
122
123
124
int FindCompiledMux(void);
125
void GenerateNVRegisterCombinerSetting(int);
126
void GenerateNVRegisterCombinerSettingConstants(int); // Compile the decodedMux into NV register combiner setting
127
void ApplyFogAtFinalStage();
128
129
void ParseDecodedMux(NVRegisterCombinerParserType &result); // Compile the decodedMux into NV register combiner setting
130
void ParseDecodedMuxForConstant(NVRegisterCombinerParserType &result); // Compile the decodedMux into NV register combiner setting
131
int SaveParserResult(const NVRegisterCombinerParserType &result);
132
133
int StagesNeedToUse(COGLDecodedMux &mux, N64StageNumberType stage);
134
int Parse1Mux(COGLDecodedMux &mux, N64StageNumberType stage, NVGeneralCombinerType &res); // Compile the decodedMux into NV register combiner setting
135
int Parse1Mux2Stages(COGLDecodedMux &mux, N64StageNumberType stage, NVGeneralCombinerType &res, NVGeneralCombinerType &res2);
136
int Parse1MuxForStage2AndFinalStage(COGLDecodedMux &mux, N64StageNumberType stage, NVGeneralCombinerType &res, NVFinalCombinerType &fres);
137
void Parse1MuxForFinalStage(COGLDecodedMux &mux, N64StageNumberType stage, NVFinalCombinerType &fres);
138
void ByPassFinalStage(NVFinalCombinerType &fres);
139
void ByPassGeneralStage(NVGeneralCombinerType &res);
140
141
GLenum ConstMap(uint8 c);
142
143
COGLColorCombinerNvidia(CRender *pRender);
144
~COGLColorCombinerNvidia();
145
146
std::vector<NVRegisterCombinerSettingType> m_vCompiledSettings;
147
148
bool m_bNVSupported; // Is this NV OGL extension combiner supported by the video card driver?
149
150
#ifdef DEBUGGER
151
void DisplaySimpleMuxString(void);
152
void DisplayNVCombinerString(NVRegisterCombinerSettingType &record);
153
#endif
154
155
};
156
157
#endif
158
159
160