-#define SHADERFLAGS_NEEDLIGHTMAP 1
-
-#define SURF_PLANEBACK 2
-#define SURF_DRAWSKY 4
-#define SURF_DRAWTURB 0x10
-#define SURF_LIGHTMAP 0x20
-#define SURF_DRAWNOALPHA 0x100
-#define SURF_DRAWFULLBRIGHT 0x200
-#define SURF_LIGHTBOTHSIDES 0x400
-#define SURF_SHADOWCAST 0x1000 // this polygon can cast stencil shadows
-#define SURF_SHADOWLIGHT 0x2000 // this polygon can be lit by stencil shadowing
-#define SURF_WATERALPHA 0x4000 // this polygon's alpha is modulated by r_wateralpha
-#define SURF_SOLIDCLIP 0x8000 // this polygon blocks movement
-
-#define SURFRENDER_OPAQUE 0
-#define SURFRENDER_ALPHA 1
-#define SURFRENDER_ADD 2
-
-struct entity_render_s;
-struct texture_s;
-struct msurface_s;
-// change this stuff when real shaders are added
-typedef struct Cshader_s
-{
- void (*shaderfunc[SHADERSTAGE_COUNT])(const struct entity_render_s *ent, const struct texture_s *texture, struct msurface_s **surfchain);
- int flags;
-}
-Cshader_t;
-
-extern Cshader_t Cshader_wall_lightmap;
-extern Cshader_t Cshader_water;
-extern Cshader_t Cshader_sky;
-
-typedef struct texture_s
-{
- // name
- char name[16];
- // size
- unsigned int width, height;
- // SURF_ flags
- unsigned int flags;
-
- // position in the model's textures array
- int number;
-
- // type of rendering (SURFRENDER_ value)
- int rendertype;
-
- // loaded the same as model skins
- skinframe_t skin;
-
- // shader to use for this texture
- Cshader_t *shader;
-
- // total frames in sequence and alternate sequence
- int anim_total[2];
- // direct pointers to each of the frames in the sequences
- // (indexed as [alternate][frame])
- struct texture_s *anim_frames[2][10];
- // set if animated or there is an alternate frame set
- // (this is an optimization in the renderer)
- int animated;
- // the current texture frame in animation
- struct texture_s *currentframe;
- // current alpha of the texture
- float currentalpha;
-}
-texture_t;
-
-typedef struct
+//#define SURF_PLANEBACK 2
+
+// use alpha blend on this material
+#define MATERIALFLAG_ALPHA 2
+// use additive blend on this material
+#define MATERIALFLAG_ADD 4
+// turn off depth test on this material
+#define MATERIALFLAG_NODEPTHTEST 8
+// multiply alpha by r_wateralpha cvar
+#define MATERIALFLAG_WATERALPHA 16
+// draw with no lighting
+#define MATERIALFLAG_FULLBRIGHT 32
+// drawn as a normal surface (alternative to SKY)
+#define MATERIALFLAG_WALL 64
+// this surface shows the sky in its place, alternative to WALL
+// skipped if transparent
+#define MATERIALFLAG_SKY 128
+// swirling water effect (used with MATERIALFLAG_WALL)
+#define MATERIALFLAG_WATERSCROLL 256
+// skips drawing the surface
+#define MATERIALFLAG_NODRAW 512
+// probably used only on q1bsp water
+#define MATERIALFLAG_LIGHTBOTHSIDES 1024
+// use alpha test on this material
+#define MATERIALFLAG_ALPHATEST 2048
+// treat this material as a blended transparency (as opposed to an alpha test
+// transparency), this causes special fog behavior, and disables glDepthMask
+#define MATERIALFLAG_BLENDED 4096
+// render using a custom blendfunc
+#define MATERIALFLAG_CUSTOMBLEND 8192
+// do not cast shadows from this material
+#define MATERIALFLAG_NOSHADOW 16384
+// render using vertex alpha (q3bsp) as texture blend parameter between foreground (normal) skinframe and background skinframe
+#define MATERIALFLAG_VERTEXTEXTUREBLEND 32768
+// disables GL_CULL_FACE on this texture (making it double sided)
+#define MATERIALFLAG_NOCULLFACE 65536
+// render with a very short depth range (like 10% of normal), this causes entities to appear infront of most of the scene
+#define MATERIALFLAG_SHORTDEPTHRANGE 131072
+// render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
+#define MATERIALFLAG_WATERSHADER 262144
+// render refraction (note: this is just a way to distort the background, otherwise useless)
+#define MATERIALFLAG_REFRACTION 524288
+// render reflection
+#define MATERIALFLAG_REFLECTION 1048576
+// use model lighting on this material (q1bsp lightmap sampling or q3bsp lightgrid, implies FULLBRIGHT is false)
+#define MATERIALFLAG_MODELLIGHT 4194304
+// add directional model lighting to this material (q3bsp lightgrid only)
+#define MATERIALFLAG_MODELLIGHT_DIRECTIONAL 8388608
+// causes RSurf_GetCurrentTexture to leave alone certain fields
+#define MATERIALFLAG_CUSTOMSURFACE 16777216
+// causes MATERIALFLAG_BLENDED to render a depth pass before rendering, hiding backfaces and other hidden geometry
+#define MATERIALFLAG_TRANSDEPTH 33554432
+// combined mask of all attributes that require depth sorted rendering
+#define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
+// combined mask of all attributes that cause some sort of transparency
+#define MATERIALFLAGMASK_TRANSLUCENT (MATERIALFLAG_WATERALPHA | MATERIALFLAG_SKY | MATERIALFLAG_NODRAW | MATERIALFLAG_ALPHATEST | MATERIALFLAG_BLENDED | MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION)
+
+typedef struct medge_s