Changes in 3.5 (not released, based on 3.1)

Renderer changes

  • General overview
    • Major source code re-organisation to support multiple rendering paths
    • Executable can be compiled specific to a single renderer or to have multiple (/vid_renderer to choose)
    • GLSL-only renderer added (requires OpenGL 4.3+)
    • Classic renderer uses more advanced OpenGL features if available, including GLSL
    • Threaded driver experience should be improved (removed glGet* calls for matrices etc)
    • Reduced state changes by caching all OpenGL state in memory
    • Reduced state changes by using trying to consistently use pre-multiplied alpha blending
    • Reduced state/texture changes by using atlas for as many 2D elements as practicable
  • QMB particle system
    • Reduced state changes by using same pre-multiplied alpha when loading particle textures
    • Reduced hull traces by caching distance from nearest clipping plane
    • Reduced hull traces/frame by changing physics option for some particle types
    • Reduced particle count caused by particle trails spawning multiple trails/entity and trampling on trail end-point data (SF#292?)
    • Sparks appear at furthest point of beam (not clipping platform edges - SF#143, SF#5?)
    • Coronas around torches kick in when the centre of the flame is visible, and don’t fade in (SF#51)
    • /gl_nailtrail 1 replaced, should be significantly faster
    • /gl_particle_fire 1 re-written, should be signficantly faster (SF#51)
    • /gl_part_fasttrails removed
  • World rendering
    • /r_nearclip has minimum value 2, increased from 0.1 (lower values produce too many errors on 16-bit z-buffers)
    • /r_farclip has maximum value 16384, no previous limit set (again, 16-bit z-buffers)
    • /gl_scaleskytextures added to keep scaling for sky & world textures distinct (default: off)
    • /gl_caustics checks the center of worldmodels (not the origin - fixes #321)
    • /gl_turb_ripple removed
    • /gl_motionblur removed
  • MD3 models
    • Powerup shells support added
    • Simpleitem replacements work as expected
    • Model hints set correctly when using MD3 models
    • Skin handling improved for MD3 models
    • Lighting improved
    • Outlining supported
  • Entity rendering
    • Powerup shells are consistent size regardless of model’s internal scaling factor
    • ng/sng are special cases to not lerp back to the frame 0 when firing stops
    • block lerping of vertices if they come from behind the player (instead of by distance)
    • /r_lerpframes only lerps frames in an animation sequence (mostly smooth, stops axe-script distortion)
    • /gl_affinemodels removed
    • /gl_smoothmodels removed
    • /gl_motiontrails removed
    • /gl_mipmap_viewmodels added: controls mipmapping of textures for viewmodel (stops muzzleflash bleeding on to edge of weapon)
    • /gl_scaleModelSimpleTextures added: controls scaling of simple item textures (previously used gl_scalemodeltextures)
  • HUD rendering
    • 2D elements are added to a single atlas (will cause delay at startup or when loading new images)
    • Tracker, centerprint & QTV stats are all added as HUD elements
    • Tracker splits strings up as messages are created, not when rendering
    • HUD notify no longer loses last character on line if that is also last character on screen - SF#513
    • 2D elements no longer rounded to integer coordinates before rendering - SF#397
    • score_bar attributes can have formatting applied (%<10r>T etc)
    • /fontload added: proportional font support if freetype available (Windows requires freetype.dll)
    • /fontlist enumerates fonts available on system
    • /gl_smoothfont removed: now use /r_smoothcrosshair, /r_smoothtext, /r_smoothimages
    • /gl_charsets_min added: restricts to basic & cyrillic fonts during startup (vastly reduces number of attempted file opens)
    • /r_drawdisc added: option to disable the IO-indicator
    • /r_tracker_inconsole messages now have the image in the console rather than the name of the image
    • /scr_new_hud_clear removed, and is essentially always enabled
    • /show_velocity_3d removed
    • /hud_speed_text_align 0 hides the text value (as per documentation)
  • Lighting
    • Bugfix: /gl_modulate change now updates all lightmaps immediately
    • Software lighting (/r_dynamic 1) waits until all changes to the lightmap are logged, then uploads lightmap once per frame
    • Hardware lighting (/r_dynamic 2) available if compute shaders available - move lighting to GPU
    • Maximum number of dynamic lights has been reduced to 32, as the upper 32 weren’t processed anyway due to bitflags overflow
    • If driver supports OpenGL 4.3 (or appropriate extensions), use driver-supplied preferred texture format
    • /gl_lighting_colour depends on /gl_lighting_vertex, should be more consistent
    • /r_lightmap removed - equivalent functionality via /r_drawflat 1;/r_wallcolor 255 255 255;/r_floorcolor 255 255 255
    • /r_lightmap_lateupload added - might give better performance for those using -nomtex
    • /r_lightmap_packbytexture added - very naive idea but reduces texture switches when rendering world (when texture arrays not available)
  • Render to framebuffers
    • /vid_framebuffer 1 - render to framebuffer
    • /vid_framebuffer_width/height/scale - resizes main buffer
    • /vid_framebuffer 2 - renders the 3D scene to framebuffer but 2D elements (hud etc) at standard resolution
    • /vid_framebuffer_palette 1 to use shader gamma/contrast etc (hardware is fastest & still default)
    • /vid_framebuffer_hdr 1 to use float render buffer (required for /vid_framebuffer_hdr_* options)
    • /r_fx_geometry 1 outlines the world based on surface normals, not surfaces.
  • Modern OpenGL (GLSL)
    • /vid_renderer 1 to enable in multi-renderer builds
    • /vid_gl_core_profile 1 if you need/want a core profile. Performance difference will vary per system/driver.
    • /r_dynamic 2 to move surface lighting to GPU (cheapest ‘hardware-lighting’ possible, but quick for dm maps)
    • Seamless turb surface rendering
    • Expect delay when starting map, as textures/models are processed
    • Luma/skybox textures will be resized on load as required
  • ‘Classic’ OpenGL (/vid_renderer 0 in multi-renderer build)
    • All OpenGL state cached to reduce redundant state changes
    • Uses VBOs & batch draw calls (opengl 2.0-ish)
    • Lightmap rendering in OpenGL 1.1 fixed
    • Can use framebuffers for software gamma/palette changes (depends on extensions)
    • Skyboxes will render using cubemaps if using OpenGL 3.2+ (minor performance boost, depends on number of sky surfaces)
    • /r_program_XXX controls if the program will try to use GLSL for that particular aspect of rendering
    • /r_fastturb 0 rendering performance improved
    • /r_drawflat 2 and /r_drawflat 3 rendering performance improved (drawflat surfaces have their own chain)
    • /r_bloom & /r_drawviewmodel used in combination greatly reduced bloom effect (advise setting /r_bloom_alpha lower if you now find effect overpowering). (SF#296,SF#297,SF#393)
    • /gl_ext_arb_texture_non_power_of_two removed (use -nonpot command-line option instead)
    • /gl_maxtmu2 removed (use -maxtmu2 instead)
  • Other changes
    • /cl_bob affects weapon again, not just the player’s head
    • /cl_bobhead allows /cl_bob settings to only affect the weapon model and not the player’s head
    • /gl_simpleitems_orientation 2: simple items stay upright when camera is affected by rollangle

Documentation

  • Macros are explicitly enumerated, and have their own documentation.json file
  • Command-line parameters are explicitly enumerated, and have their own documentation.json file
  • Client can generate its own documentation.json files, including default values for variables

General changes

  • Bugfix: players no longer highlighted as sending VOIP when -nosound command-line option used
  • Bugfix: invalid demo_dir caused demo browser to be empty & locked (SF#283 - related bug, anyway)
  • Bugfix: files are identified as archive if extension is not lower-case (SF#313)
  • Bugfix: healthdamage/armordamage reset when point of view changes (SF#146)
  • Bugfix: maps with sky texture named “SKY” instead of “sky” could lead to memory corruption
  • Bugfix: on OSX, processor information string was left pointing to stack-allocated memory
  • Bugfix: /cl_fakeshaft is disabled during intermission, so auto-screenshots should no longer have an LG beam
  • Teamfortress: block r_skincolormode working on TF or other server with skin/color forcing enabled
  • Teamfortress: color in scoreboard is set based on team name if on TF server (team renaming not supported)
  • The hunk is no longer used to store skins & models, only maps (no cached data being flushed and reloaded)
  • In competitive rulesets, logging console to disk is disabled during match
  • Server: PR1 strings overflowing integer offset stored in lookup table with negative integer instead (Windows 64-bit)
  • Some commands have been renamed dev_* and are only available when running with -dev on command line (req by dopeskillz)
  • Filesystem startup no longer lists .pak files being opened, lists /path after completion instead (SF#354)
  • /file_browser_sort_archives added - if set, archives are still at top of list, but sorted in same way files are (SF#273)
  • /cl_startupdemo shouldn’t conflict with /cl_onload options (SF#467,SF#468)
  • /cl_clock_format can be changed when connected to server and has same values/logic as /hud_clock_format
  • /scr_shownick_order can be changed when connected to server
  • /timedemo automatically raises console as demo starts
  • Context creation changed, if context can’t be created msaa/24bit-depth/hw-accel/srgb then various fallbacks attempted (previously only msaa), rather than falling back directly to software rendering
  • cvars limited by ruleset max/min values weren’t checked during application-startup
  • toggling console exits hud_editor mode
  • default.cfg executes on config load/reset (default.cfg in id1/pak0.pak & nQuake is ignored)

Changeover issues/notes

  • If you are using particle explosions/effects and notice small artifacts around the smoke etc, check your particlefont.png and make sure it doesn’t have any stray non-alpha pixels around 64-pixel boundaries. ezQuake 3.5 takes the particle font and splits it into component textures, so any errors around the edges will be more visible (reported with config set to /r_explosionType 1, /gl_part_explosions 1)