[quake3-commits] [ioquake/ioq3] 6c3d92: Fix IQM root joint backlerp when joint number is m...

Zack Middleton zack at cloemail.com
Fri Jul 27 18:42:42 EDT 2018


  Branch: refs/heads/master
  Home:   https://github.com/ioquake/ioq3
  Commit: 6c3d92133ddcc0b91f1e24dec1fbbfddd9dd4d45
      https://github.com/ioquake/ioq3/commit/6c3d92133ddcc0b91f1e24dec1fbbfddd9dd4d45
  Author: Zack Middleton <zack at cloemail.com>
  Date:   2018-07-27 (Fri, 27 Jul 2018)

  Changed paths:
    M code/renderergl1/tr_model_iqm.c
    M code/renderergl2/tr_model_iqm.c

  Log Message:
  -----------
  Fix IQM root joint backlerp when joint number is more than 0

Backlerp for root joint (joint with no parent) was always applied to
joint 0. This is an issue when a model has multiple root joints.


  Commit: fdc08e860ea400bc71e1aeeae7094b3968f0891c
      https://github.com/ioquake/ioq3/commit/fdc08e860ea400bc71e1aeeae7094b3968f0891c
  Author: Zack Middleton <zack at cloemail.com>
  Date:   2018-07-27 (Fri, 27 Jul 2018)

  Changed paths:
    M code/renderergl1/tr_local.h
    M code/renderergl1/tr_model_iqm.c
    M code/renderergl2/tr_local.h
    M code/renderergl2/tr_model_iqm.c

  Log Message:
  -----------
  Improve IQM loading

- Only allocate memory for vertex arrays that are present in the IQM
file and are actually used (may not have colors or blend index/weights,
don't load tangents in opengl1). (Colors is fixed to next commit.)
- Explicitly handle loading IQM files without meshes (bones only).
- Better IQM validation. Header data offset 0 mean data is not present
in file. Check if required vertex arrays are present.

This involved a lot of white space changes and moving code around.


  Commit: cccd283be84935c46d473edf0a667efa5707303a
      https://github.com/ioquake/ioq3/commit/cccd283be84935c46d473edf0a667efa5707303a
  Author: Zack Middleton <zack at cloemail.com>
  Date:   2018-07-27 (Fri, 27 Jul 2018)

  Changed paths:
    M code/renderergl1/tr_local.h
    M code/renderergl1/tr_model_iqm.c
    M code/renderergl2/tr_local.h
    M code/renderergl2/tr_model_iqm.c

  Log Message:
  -----------
  Improve IQM CPU vertex skinning performance

Only calculate vertex blend matrix for each unique bone indexes/weights
combination once per-surface instead of recalculating for each vertex.
For best performance the model surfaces needs to use few vertex bone
indexes and weights combinations.

Unroll loops so GCC better optimizes them.

In my tests drawing animated IQM may take 50% as long in opengl1 and
70% as long in opengl2. It will vary by model though and might not
help much at all.

Made unanimated IQM models skip matrix math altogether.


  Commit: 11337c9fa2fa45371182603863164a9186ff2b9e
      https://github.com/ioquake/ioq3/commit/11337c9fa2fa45371182603863164a9186ff2b9e
  Author: Zack Middleton <zack at cloemail.com>
  Date:   2018-07-27 (Fri, 27 Jul 2018)

  Changed paths:
    M code/renderergl2/glsl/fogpass_vp.glsl
    M code/renderergl2/glsl/generic_vp.glsl
    M code/renderergl2/glsl/lightall_vp.glsl
    M code/renderergl2/glsl/shadowfill_vp.glsl
    M code/renderergl2/tr_glsl.c
    M code/renderergl2/tr_init.c
    M code/renderergl2/tr_local.h
    M code/renderergl2/tr_model_iqm.c
    M code/renderergl2/tr_shade.c
    M code/renderergl2/tr_surface.c

  Log Message:
  -----------
  OpenGL2: Add GPU vertex skinning for IQM models

Using GPU vertex skinning is significantly faster than CPU vertex
skinning. Especially since OpenGL2 has to run R_VaoPackNormal() and
R_VaoPackTangent() each vertex each frame which causes CPU vertex
skinning to be significantly slower than OpenGL1 renderer.


Compare: https://github.com/ioquake/ioq3/compare/39e2113c73b8...11337c9fa2fa
      **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.


More information about the quake3-commits mailing list