X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=dpsoftrast.h;h=3f267a2e669d191e69a69ae12b5f4ed3c2d1e05b;hb=5070a71b37b3dde085b45ff86fd36c5bb274a039;hp=f73808504e0ed68fef8c34133926bc1c33b46dc3;hpb=a1ca10e71110ebee6a6f0acedce3e7f386661539;p=xonotic%2Fdarkplaces.git diff --git a/dpsoftrast.h b/dpsoftrast.h index f7380850..3f267a2e 100644 --- a/dpsoftrast.h +++ b/dpsoftrast.h @@ -14,13 +14,15 @@ #define DPSOFTRAST_TEXTURE_FORMAT_DEPTH 1 #define DPSOFTRAST_TEXTURE_FORMAT_RGBA8 2 #define DPSOFTRAST_TEXTURE_FORMAT_ALPHA8 3 -#define DPSOFTRAST_TEXTURE_FORMAT_COMPAREMASK 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 4 -#define DPSOFTRAST_TEXTURE_FLAG_CUBEMAP 8 -#define DPSOFTRAST_TEXTURE_FLAG_USEALPHA 16 -#define DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE 32 +#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 { @@ -31,7 +33,7 @@ typedef enum DPSOFTRAST_TEXTURE_FILTER_e } DPSOFTRAST_TEXTURE_FILTER; -void DPSOFTRAST_Init(int width, int height, int numthreads, unsigned int *colorpixels, unsigned int *depthpixels); +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); @@ -54,6 +56,7 @@ 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); @@ -62,8 +65,6 @@ 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_AlphaTest(int enable); -void DPSOFTRAST_AlphaFunc(int alphafunc, float alphavalue); 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); @@ -123,6 +124,21 @@ typedef enum gl20_texunit_e } 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 { @@ -156,27 +172,31 @@ typedef enum shaderpermutation_e 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_GAMMARAMPS = 1<<8, ///< gamma (postprocessing only) - SHADERPERMUTATION_CUBEFILTER = 1<<9, ///< (lightsource) use cubemap light filter - SHADERPERMUTATION_GLOW = 1<<10, ///< (lightmap) blend in an additive glow texture - SHADERPERMUTATION_BLOOM = 1<<11, ///< bloom (postprocessing only) - SHADERPERMUTATION_SPECULAR = 1<<12, ///< (lightsource or deluxemapping) render specular effects - SHADERPERMUTATION_POSTPROCESSING = 1<<13, ///< user defined postprocessing (postprocessing only) - SHADERPERMUTATION_REFLECTION = 1<<14, ///< normalmap-perturbed reflection of the scene infront of the surface, preformed as an overlay on the surface - SHADERPERMUTATION_OFFSETMAPPING = 1<<15, ///< adjust texcoords to roughly simulate a displacement mapped surface - SHADERPERMUTATION_OFFSETMAPPING_RELIEFMAPPING = 1<<16, ///< adjust texcoords to accurately simulate a displacement mapped surface (requires OFFSETMAPPING to also be set!) - SHADERPERMUTATION_SHADOWMAP2D = 1<<17, ///< (lightsource) use shadowmap texture as light filter - SHADERPERMUTATION_SHADOWMAPPCF = 1<<18, ///< (lightsource) use percentage closer filtering on shadowmap test results - SHADERPERMUTATION_SHADOWMAPPCF2 = 1<<19, ///< (lightsource) use higher quality percentage closer filtering on shadowmap test results - SHADERPERMUTATION_SHADOWSAMPLER = 1<<20, ///< (lightsource) use hardware shadowmap test - SHADERPERMUTATION_SHADOWMAPVSDCT = 1<<21, ///< (lightsource) use virtual shadow depth cube texture for shadowmap indexing - SHADERPERMUTATION_SHADOWMAPORTHO = 1<<22, //< (lightsource) use orthographic shadowmap projection - SHADERPERMUTATION_DEFERREDLIGHTMAP = 1<<23, ///< (lightmap) read Texture_ScreenDiffuse/Specular textures and add them on top of lightmapping - SHADERPERMUTATION_ALPHAKILL = 1<<24, ///< (deferredgeometry) discard pixel if diffuse texture alpha below 0.5 - SHADERPERMUTATION_REFLECTCUBE = 1<<25, ///< fake reflections using global cubemap (not HDRI light probe) - SHADERPERMUTATION_NORMALMAPSCROLLBLEND = 1<<26, // (water) counter-direction normalmaps scrolling - SHADERPERMUTATION_LIMIT = 1<<27, ///< size of permutations array - SHADERPERMUTATION_COUNT = 27 ///< size of shaderpermutationinfo array + 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_SHADOWMAPPCF = 1<<19, ///< (lightsource) use percentage closer filtering on shadowmap test results + SHADERPERMUTATION_SHADOWMAPPCF2 = 1<<20, ///< (lightsource) use higher quality percentage closer filtering on shadowmap test results + SHADERPERMUTATION_SHADOWSAMPLER = 1<<21, ///< (lightsource) use hardware shadowmap test + SHADERPERMUTATION_SHADOWMAPVSDCT = 1<<22, ///< (lightsource) use virtual shadow depth cube texture for shadowmap indexing + SHADERPERMUTATION_SHADOWMAPORTHO = 1<<23, ///< (lightsource) use orthographic shadowmap projection + SHADERPERMUTATION_DEFERREDLIGHTMAP = 1<<24, ///< (lightmap) read Texture_ScreenDiffuse/Specular textures and add them on top of lightmapping + SHADERPERMUTATION_ALPHAKILL = 1<<25, ///< (deferredgeometry) discard pixel if diffuse texture alpha below 0.5 + SHADERPERMUTATION_REFLECTCUBE = 1<<26, ///< fake reflections using global cubemap (not HDRI light probe) + SHADERPERMUTATION_NORMALMAPSCROLLBLEND = 1<<27, ///< (water) counter-direction normalmaps scrolling + SHADERPERMUTATION_BOUNCEGRID = 1<<28, ///< (lightmap) use Texture_BounceGrid as an additional source of ambient light + SHADERPERMUTATION_BOUNCEGRIDDIRECTIONAL = 1<<29, ///< (lightmap) use 16-component pixels in bouncegrid texture for directional lighting rather than standard 4-component + SHADERPERMUTATION_TRIPPY = 1<<30, ///< use trippy vertex shader effect + SHADERPERMUTATION_LIMIT = 1<<31, ///< size of permutations array + SHADERPERMUTATION_COUNT = 31 ///< size of shaderpermutationinfo array } shaderpermutation_t; @@ -235,7 +255,7 @@ typedef enum DPSOFTRAST_UNIFORM_e DPSOFTRAST_UNIFORM_LightColor, DPSOFTRAST_UNIFORM_LightDir, DPSOFTRAST_UNIFORM_LightPosition, - DPSOFTRAST_UNIFORM_OffsetMapping_Scale, + DPSOFTRAST_UNIFORM_OffsetMapping_ScaleSteps, DPSOFTRAST_UNIFORM_PixelSize, DPSOFTRAST_UNIFORM_ReflectColor, DPSOFTRAST_UNIFORM_ReflectFactor, @@ -292,7 +312,7 @@ typedef enum DPSOFTRAST_UNIFORM_e } DPSOFTRAST_UNIFORM; -void DPSOFTRAST_SetShader(int mode, int permutation); +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)