forked from Droog71/wrath-darkplaces
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdpsoftrast.h
327 lines (308 loc) · 15.5 KB
/
dpsoftrast.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#ifndef DPSOFTRAST_H
#define DPSOFTRAST_H
#include <stdlib.h>
#define DPSOFTRAST_MAXMIPMAPS 16
#define DPSOFTRAST_TEXTURE_MAXSIZE (1<<(DPSOFTRAST_MAXMIPMAPS - 1))
#define DPSOFTRAST_MAXTEXTUREUNITS 16
#define DPSOFTRAST_MAXTEXCOORDARRAYS 8
// type of pixels in texture (some of these are converted to BGRA8 on update)
#define DPSOFTRAST_TEXTURE_FORMAT_BGRA8 0
#define DPSOFTRAST_TEXTURE_FORMAT_DEPTH 1
#define DPSOFTRAST_TEXTURE_FORMAT_RGBA8 2
#define DPSOFTRAST_TEXTURE_FORMAT_ALPHA8 3
#define DPSOFTRAST_TEXTURE_FORMAT_RGBA16F 4
#define DPSOFTRAST_TEXTURE_FORMAT_RGBA32F 5
#define DPSOFTRAST_TEXTURE_FORMAT_COMPAREMASK 0x0F
// modifier flags for texture (can not be changed after creation)
#define DPSOFTRAST_TEXTURE_FLAG_MIPMAP 0x10
#define DPSOFTRAST_TEXTURE_FLAG_CUBEMAP 0x20
#define DPSOFTRAST_TEXTURE_FLAG_USEALPHA 0x40
#define DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE 0x80
typedef enum DPSOFTRAST_TEXTURE_FILTER_e
{
DPSOFTRAST_TEXTURE_FILTER_NEAREST = 0,
DPSOFTRAST_TEXTURE_FILTER_LINEAR = 1,
DPSOFTRAST_TEXTURE_FILTER_NEAREST_MIPMAP_TRIANGLE = 2,
DPSOFTRAST_TEXTURE_FILTER_LINEAR_MIPMAP_TRIANGLE = 3,
}
DPSOFTRAST_TEXTURE_FILTER;
int DPSOFTRAST_Init(int width, int height, int numthreads, int interlace, unsigned int *colorpixels, unsigned int *depthpixels);
void DPSOFTRAST_Shutdown(void);
void DPSOFTRAST_Flush(void);
void DPSOFTRAST_Finish(void);
int DPSOFTRAST_Texture_New(int flags, int width, int height, int depth);
void DPSOFTRAST_Texture_Free(int index);
void DPSOFTRAST_Texture_UpdatePartial(int index, int mip, const unsigned char *pixels, int blockx, int blocky, int blockwidth, int blockheight);
void DPSOFTRAST_Texture_UpdateFull(int index, const unsigned char *pixels);
int DPSOFTRAST_Texture_GetWidth(int index, int mip);
int DPSOFTRAST_Texture_GetHeight(int index, int mip);
int DPSOFTRAST_Texture_GetDepth(int index, int mip);
unsigned char *DPSOFTRAST_Texture_GetPixelPointer(int index, int mip);
void DPSOFTRAST_Texture_Filter(int index, DPSOFTRAST_TEXTURE_FILTER filter);
void DPSOFTRAST_SetRenderTargets(int width, int height, unsigned int *depthpixels, unsigned int *colorpixels0, unsigned int *colorpixels1, unsigned int *colorpixels2, unsigned int *colorpixels3);
void DPSOFTRAST_Viewport(int x, int y, int width, int height);
void DPSOFTRAST_ClearColor(float r, float g, float b, float a);
void DPSOFTRAST_ClearDepth(float d);
void DPSOFTRAST_ColorMask(int r, int g, int b, int a);
void DPSOFTRAST_DepthTest(int enable);
void DPSOFTRAST_ScissorTest(int enable);
void DPSOFTRAST_Scissor(float x, float y, float width, float height);
void DPSOFTRAST_ClipPlane(float x, float y, float z, float w);
void DPSOFTRAST_BlendFunc(int smodulate, int dmodulate);
void DPSOFTRAST_BlendSubtract(int enable);
void DPSOFTRAST_DepthMask(int enable);
void DPSOFTRAST_DepthFunc(int comparemode);
void DPSOFTRAST_DepthRange(float range0, float range1);
void DPSOFTRAST_PolygonOffset(float alongnormal, float intoview);
void DPSOFTRAST_CullFace(int mode);
void DPSOFTRAST_Color4f(float r, float g, float b, float a);
void DPSOFTRAST_GetPixelsBGRA(int blockx, int blocky, int blockwidth, int blockheight, unsigned char *outpixels);
void DPSOFTRAST_CopyRectangleToTexture(int index, int mip, int tx, int ty, int sx, int sy, int width, int height);
void DPSOFTRAST_SetTexture(int unitnum, int index);
void DPSOFTRAST_SetVertexPointer(const float *vertex3f, size_t stride);
void DPSOFTRAST_SetColorPointer(const float *color4f, size_t stride);
void DPSOFTRAST_SetColorPointer4ub(const unsigned char *color4ub, size_t stride);
void DPSOFTRAST_SetTexCoordPointer(int unitnum, int numcomponents, size_t stride, const float *texcoordf);
typedef enum gl20_texunit_e
{
// postprocess shaders, and generic shaders:
GL20TU_FIRST = 0,
GL20TU_SECOND = 1,
GL20TU_GAMMARAMPS = 2,
// standard material properties
GL20TU_NORMAL = 0,
GL20TU_COLOR = 1,
GL20TU_GLOSS = 2,
GL20TU_GLOW = 3,
// material properties for a second material
GL20TU_SECONDARY_NORMAL = 4,
GL20TU_SECONDARY_COLOR = 5,
GL20TU_SECONDARY_GLOSS = 6,
GL20TU_SECONDARY_GLOW = 7,
// material properties for a colormapped material
// conflicts with secondary material
GL20TU_PANTS = 4,
GL20TU_SHIRT = 7,
// fog fade in the distance
GL20TU_FOGMASK = 8,
// compiled ambient lightmap and deluxemap
GL20TU_LIGHTMAP = 9,
GL20TU_DELUXEMAP = 10,
// refraction, used by water shaders
GL20TU_REFRACTION = 3,
// reflection, used by water shaders, also with normal material rendering
// conflicts with secondary material
GL20TU_REFLECTION = 7,
// rtlight attenuation (distance fade) and cubemap filter (projection texturing)
// conflicts with lightmap/deluxemap
GL20TU_ATTENUATION = 9,
GL20TU_CUBE = 10,
GL20TU_SHADOWMAP2D = 15,
GL20TU_CUBEPROJECTION = 12,
// rtlight prepass data (screenspace depth and normalmap)
// GL20TU_UNUSED1 = 13,
GL20TU_SCREENNORMALMAP = 14,
// lightmap prepass data (screenspace diffuse and specular from lights)
GL20TU_SCREENDIFFUSE = 11,
GL20TU_SCREENSPECULAR = 12,
// fake reflections
GL20TU_REFLECTMASK = 5,
GL20TU_REFLECTCUBE = 6,
GL20TU_FOGHEIGHTTEXTURE = 14
}
gl20_texunit;
typedef enum glsl_attrib_e
{
GLSLATTRIB_POSITION = 0,
GLSLATTRIB_COLOR = 1,
GLSLATTRIB_TEXCOORD0 = 2,
GLSLATTRIB_TEXCOORD1 = 3,
GLSLATTRIB_TEXCOORD2 = 4,
GLSLATTRIB_TEXCOORD3 = 5,
GLSLATTRIB_TEXCOORD4 = 6,
GLSLATTRIB_TEXCOORD5 = 7,
GLSLATTRIB_TEXCOORD6 = 8,
GLSLATTRIB_TEXCOORD7 = 9,
}
glsl_attrib;
// this enum selects which of the glslshadermodeinfo entries should be used
typedef enum shadermode_e
{
SHADERMODE_GENERIC, ///< (particles/HUD/etc) vertex color, optionally multiplied by one texture
SHADERMODE_POSTPROCESS, ///< postprocessing shader (r_glsl_postprocess)
SHADERMODE_DEPTH_OR_SHADOW, ///< (depthfirst/shadows) vertex shader only
SHADERMODE_FLATCOLOR, ///< (lightmap) modulate texture by uniform color (q1bsp, q3bsp)
SHADERMODE_VERTEXCOLOR, ///< (lightmap) modulate texture by vertex colors (q3bsp)
SHADERMODE_LIGHTMAP, ///< (lightmap) modulate texture by lightmap texture (q1bsp, q3bsp)
SHADERMODE_FAKELIGHT, ///< (fakelight) modulate texture by "fake" lighting (no lightmaps, no nothing)
SHADERMODE_LIGHTDIRECTIONMAP_MODELSPACE, ///< (lightmap) use directional pixel shading from texture containing modelspace light directions (q3bsp deluxemap)
SHADERMODE_LIGHTDIRECTIONMAP_TANGENTSPACE, ///< (lightmap) use directional pixel shading from texture containing tangentspace light directions (q1bsp deluxemap)
SHADERMODE_LIGHTDIRECTIONMAP_FORCED_LIGHTMAP, // forced deluxemapping for lightmapped surfaces
SHADERMODE_LIGHTDIRECTIONMAP_FORCED_VERTEXCOLOR, // forced deluxemapping for vertexlit surfaces
SHADERMODE_LIGHTDIRECTION, ///< (lightmap) use directional pixel shading from fixed light direction (q3bsp)
SHADERMODE_LIGHTSOURCE, ///< (lightsource) use directional pixel shading from light source (rtlight)
SHADERMODE_REFRACTION, ///< refract background (the material is rendered normally after this pass)
SHADERMODE_WATER, ///< refract background and reflection (the material is rendered normally after this pass)
SHADERMODE_DEFERREDGEOMETRY, ///< (deferred) render material properties to screenspace geometry buffers
SHADERMODE_DEFERREDLIGHTSOURCE, ///< (deferred) use directional pixel shading from light source (rtlight) on screenspace geometry buffers
SHADERMODE_COUNT
}
shadermode_t;
typedef enum shaderpermutation_e
{
SHADERPERMUTATION_DIFFUSE = 1<<0, ///< (lightsource) whether to use directional shading
SHADERPERMUTATION_VERTEXTEXTUREBLEND = 1<<1, ///< indicates this is a two-layer material blend based on vertex alpha (q3bsp)
SHADERPERMUTATION_VIEWTINT = 1<<2, ///< view tint (postprocessing only), use vertex colors (generic only)
SHADERPERMUTATION_COLORMAPPING = 1<<3, ///< indicates this is a colormapped skin
SHADERPERMUTATION_SATURATION = 1<<4, ///< saturation (postprocessing only)
SHADERPERMUTATION_FOGINSIDE = 1<<5, ///< tint the color by fog color or black if using additive blend mode
SHADERPERMUTATION_FOGOUTSIDE = 1<<6, ///< tint the color by fog color or black if using additive blend mode
SHADERPERMUTATION_FOGHEIGHTTEXTURE = 1<<7, ///< fog color and density determined by texture mapped on vertical axis
SHADERPERMUTATION_FOGALPHAHACK = 1<<8, ///< fog color and density determined by texture mapped on vertical axis
SHADERPERMUTATION_GAMMARAMPS = 1<<9, ///< gamma (postprocessing only)
SHADERPERMUTATION_CUBEFILTER = 1<<10, ///< (lightsource) use cubemap light filter
SHADERPERMUTATION_GLOW = 1<<11, ///< (lightmap) blend in an additive glow texture
SHADERPERMUTATION_BLOOM = 1<<12, ///< bloom (postprocessing only)
SHADERPERMUTATION_SPECULAR = 1<<13, ///< (lightsource or deluxemapping) render specular effects
SHADERPERMUTATION_POSTPROCESSING = 1<<14, ///< user defined postprocessing (postprocessing only)
SHADERPERMUTATION_REFLECTION = 1<<15, ///< normalmap-perturbed reflection of the scene infront of the surface, preformed as an overlay on the surface
SHADERPERMUTATION_OFFSETMAPPING = 1<<16, ///< adjust texcoords to roughly simulate a displacement mapped surface
SHADERPERMUTATION_OFFSETMAPPING_RELIEFMAPPING = 1<<17, ///< adjust texcoords to accurately simulate a displacement mapped surface (requires OFFSETMAPPING to also be set!)
SHADERPERMUTATION_SHADOWMAP2D = 1<<18, ///< (lightsource) use shadowmap texture as light filter
SHADERPERMUTATION_SHADOWMAPVSDCT = 1<<19, ///< (lightsource) use virtual shadow depth cube texture for shadowmap indexing
SHADERPERMUTATION_SHADOWMAPORTHO = 1<<20, ///< (lightsource) use orthographic shadowmap projection
SHADERPERMUTATION_DEFERREDLIGHTMAP = 1<<21, ///< (lightmap) read Texture_ScreenDiffuse/Specular textures and add them on top of lightmapping
SHADERPERMUTATION_ALPHAKILL = 1<<22, ///< (deferredgeometry) discard pixel if diffuse texture alpha below 0.5, (generic) apply global alpha
SHADERPERMUTATION_REFLECTCUBE = 1<<23, ///< fake reflections using global cubemap (not HDRI light probe)
SHADERPERMUTATION_NORMALMAPSCROLLBLEND = 1<<24, ///< (water) counter-direction normalmaps scrolling
SHADERPERMUTATION_BOUNCEGRID = 1<<25, ///< (lightmap) use Texture_BounceGrid as an additional source of ambient light
SHADERPERMUTATION_BOUNCEGRIDDIRECTIONAL = 1<<26, ///< (lightmap) use 16-component pixels in bouncegrid texture for directional lighting rather than standard 4-component
SHADERPERMUTATION_TRIPPY = 1<<27, ///< use trippy vertex shader effect
SHADERPERMUTATION_DEPTHRGB = 1<<28, ///< read/write depth values in RGB color coded format for older hardware without depth samplers
SHADERPERMUTATION_ALPHAGEN_VERTEX = 1<<29, ///< alphaGen vertex
SHADERPERMUTATION_SKELETAL = 1<<30, ///< (skeletal models) use skeletal matrices to deform vertices (gpu-skinning)
SHADERPERMUTATION_COUNT = 31 ///< size of shaderpermutationinfo array
}
shaderpermutation_t;
typedef enum DPSOFTRAST_UNIFORM_e
{
DPSOFTRAST_UNIFORM_Texture_First,
DPSOFTRAST_UNIFORM_Texture_Second,
DPSOFTRAST_UNIFORM_Texture_GammaRamps,
DPSOFTRAST_UNIFORM_Texture_Normal,
DPSOFTRAST_UNIFORM_Texture_Color,
DPSOFTRAST_UNIFORM_Texture_Gloss,
DPSOFTRAST_UNIFORM_Texture_Glow,
DPSOFTRAST_UNIFORM_Texture_SecondaryNormal,
DPSOFTRAST_UNIFORM_Texture_SecondaryColor,
DPSOFTRAST_UNIFORM_Texture_SecondaryGloss,
DPSOFTRAST_UNIFORM_Texture_SecondaryGlow,
DPSOFTRAST_UNIFORM_Texture_Pants,
DPSOFTRAST_UNIFORM_Texture_Shirt,
DPSOFTRAST_UNIFORM_Texture_FogHeightTexture,
DPSOFTRAST_UNIFORM_Texture_FogMask,
DPSOFTRAST_UNIFORM_Texture_Lightmap,
DPSOFTRAST_UNIFORM_Texture_Deluxemap,
DPSOFTRAST_UNIFORM_Texture_Attenuation,
DPSOFTRAST_UNIFORM_Texture_Cube,
DPSOFTRAST_UNIFORM_Texture_Refraction,
DPSOFTRAST_UNIFORM_Texture_Reflection,
DPSOFTRAST_UNIFORM_Texture_ShadowMap2D,
DPSOFTRAST_UNIFORM_Texture_CubeProjection,
DPSOFTRAST_UNIFORM_Texture_ScreenNormalMap,
DPSOFTRAST_UNIFORM_Texture_ScreenDiffuse,
DPSOFTRAST_UNIFORM_Texture_ScreenSpecular,
DPSOFTRAST_UNIFORM_Texture_ReflectMask,
DPSOFTRAST_UNIFORM_Texture_ReflectCube,
DPSOFTRAST_UNIFORM_Alpha,
DPSOFTRAST_UNIFORM_BloomBlur_Parameters,
DPSOFTRAST_UNIFORM_ClientTime,
DPSOFTRAST_UNIFORM_Color_Ambient,
DPSOFTRAST_UNIFORM_Color_Diffuse,
DPSOFTRAST_UNIFORM_Color_Specular,
DPSOFTRAST_UNIFORM_Color_Glow,
DPSOFTRAST_UNIFORM_Color_Pants,
DPSOFTRAST_UNIFORM_Color_Shirt,
DPSOFTRAST_UNIFORM_DeferredColor_Ambient,
DPSOFTRAST_UNIFORM_DeferredColor_Diffuse,
DPSOFTRAST_UNIFORM_DeferredColor_Specular,
DPSOFTRAST_UNIFORM_DeferredMod_Diffuse,
DPSOFTRAST_UNIFORM_DeferredMod_Specular,
DPSOFTRAST_UNIFORM_DistortScaleRefractReflect,
DPSOFTRAST_UNIFORM_EyePosition,
DPSOFTRAST_UNIFORM_FogColor,
DPSOFTRAST_UNIFORM_FogHeightFade,
DPSOFTRAST_UNIFORM_FogPlane,
DPSOFTRAST_UNIFORM_FogPlaneViewDist,
DPSOFTRAST_UNIFORM_FogRangeRecip,
DPSOFTRAST_UNIFORM_LightColor,
DPSOFTRAST_UNIFORM_LightDir,
DPSOFTRAST_UNIFORM_LightPosition,
DPSOFTRAST_UNIFORM_OffsetMapping_ScaleSteps,
DPSOFTRAST_UNIFORM_PixelSize,
DPSOFTRAST_UNIFORM_ReflectColor,
DPSOFTRAST_UNIFORM_ReflectFactor,
DPSOFTRAST_UNIFORM_ReflectOffset,
DPSOFTRAST_UNIFORM_RefractColor,
DPSOFTRAST_UNIFORM_Saturation,
DPSOFTRAST_UNIFORM_ScreenCenterRefractReflect,
DPSOFTRAST_UNIFORM_ScreenScaleRefractReflect,
DPSOFTRAST_UNIFORM_ScreenToDepth,
DPSOFTRAST_UNIFORM_ShadowMap_Parameters,
DPSOFTRAST_UNIFORM_ShadowMap_TextureScale,
DPSOFTRAST_UNIFORM_SpecularPower,
DPSOFTRAST_UNIFORM_UserVec1,
DPSOFTRAST_UNIFORM_UserVec2,
DPSOFTRAST_UNIFORM_UserVec3,
DPSOFTRAST_UNIFORM_UserVec4,
DPSOFTRAST_UNIFORM_ViewTintColor,
DPSOFTRAST_UNIFORM_ViewToLightM1,
DPSOFTRAST_UNIFORM_ViewToLightM2,
DPSOFTRAST_UNIFORM_ViewToLightM3,
DPSOFTRAST_UNIFORM_ViewToLightM4,
DPSOFTRAST_UNIFORM_ModelToLightM1,
DPSOFTRAST_UNIFORM_ModelToLightM2,
DPSOFTRAST_UNIFORM_ModelToLightM3,
DPSOFTRAST_UNIFORM_ModelToLightM4,
DPSOFTRAST_UNIFORM_TexMatrixM1,
DPSOFTRAST_UNIFORM_TexMatrixM2,
DPSOFTRAST_UNIFORM_TexMatrixM3,
DPSOFTRAST_UNIFORM_TexMatrixM4,
DPSOFTRAST_UNIFORM_BackgroundTexMatrixM1,
DPSOFTRAST_UNIFORM_BackgroundTexMatrixM2,
DPSOFTRAST_UNIFORM_BackgroundTexMatrixM3,
DPSOFTRAST_UNIFORM_BackgroundTexMatrixM4,
DPSOFTRAST_UNIFORM_ModelViewProjectionMatrixM1,
DPSOFTRAST_UNIFORM_ModelViewProjectionMatrixM2,
DPSOFTRAST_UNIFORM_ModelViewProjectionMatrixM3,
DPSOFTRAST_UNIFORM_ModelViewProjectionMatrixM4,
DPSOFTRAST_UNIFORM_ModelViewMatrixM1,
DPSOFTRAST_UNIFORM_ModelViewMatrixM2,
DPSOFTRAST_UNIFORM_ModelViewMatrixM3,
DPSOFTRAST_UNIFORM_ModelViewMatrixM4,
DPSOFTRAST_UNIFORM_PixelToScreenTexCoord,
DPSOFTRAST_UNIFORM_ModelToReflectCubeM1,
DPSOFTRAST_UNIFORM_ModelToReflectCubeM2,
DPSOFTRAST_UNIFORM_ModelToReflectCubeM3,
DPSOFTRAST_UNIFORM_ModelToReflectCubeM4,
DPSOFTRAST_UNIFORM_ShadowMapMatrixM1,
DPSOFTRAST_UNIFORM_ShadowMapMatrixM2,
DPSOFTRAST_UNIFORM_ShadowMapMatrixM3,
DPSOFTRAST_UNIFORM_ShadowMapMatrixM4,
DPSOFTRAST_UNIFORM_BloomColorSubtract,
DPSOFTRAST_UNIFORM_NormalmapScrollBlend,
DPSOFTRAST_UNIFORM_OffsetMapping_LodDistance,
DPSOFTRAST_UNIFORM_OffsetMapping_Bias,
DPSOFTRAST_UNIFORM_TOTAL
}
DPSOFTRAST_UNIFORM;
void DPSOFTRAST_SetShader(int mode, int permutation, int exactspecularmath);
#define DPSOFTRAST_Uniform1f(index, v0) DPSOFTRAST_Uniform4f(index, v0, 0, 0, 0)
#define DPSOFTRAST_Uniform2f(index, v0, v1) DPSOFTRAST_Uniform4f(index, v0, v1, 0, 0)
#define DPSOFTRAST_Uniform3f(index, v0, v1, v2) DPSOFTRAST_Uniform4f(index, v0, v1, v2, 0)
void DPSOFTRAST_Uniform4f(DPSOFTRAST_UNIFORM index, float v0, float v1, float v2, float v3);
void DPSOFTRAST_Uniform4fv(DPSOFTRAST_UNIFORM index, const float *v);
void DPSOFTRAST_UniformMatrix4fv(DPSOFTRAST_UNIFORM index, int arraysize, int transpose, const float *v);
void DPSOFTRAST_Uniform1i(DPSOFTRAST_UNIFORM index, int i0);
void DPSOFTRAST_DrawTriangles(int firstvertex, int numvertices, int numtriangles, const int *element3i, const unsigned short *element3s);
#endif // DPSOFTRAST_H