Commit Graph

8829 Commits

Author SHA1 Message Date
Bill Currie 2e98c31175 Check the corrent bits when reading scale frame data.
Fixes the invalid reads when loading an iqm (at least for mrfixit).
2012-05-15 21:08:45 +09:00
Bill Currie 9c69404163 Attempt to render iqm models.
Things are a right mess (segfaults, invalid accesses on load, etc), but
hey, it's a start :)
2012-05-15 21:08:45 +09:00
Bill Currie 15fd3be73a Allow iqm models when storing efrags. 2012-05-15 21:08:45 +09:00
Bill Currie a880f33152 Set the model type for iqm.
Forgot this rather important step :P
2012-05-15 21:08:45 +09:00
Bill Currie 41e7a6c70c Search for the "nearest" dlights.
Nearness is a function of both distance and intensity: distant bright
lights can take priority over close dim lights.
2012-05-15 21:08:45 +09:00
Bill Currie 0becd35b65 Begin work on rendering iqm models.
No chance of working yet, but the shaders compile :)
2012-05-15 21:08:45 +09:00
Bill Currie 078cb10caf Add a stride field to iqm_t.
Since iqm vertex arrays are variable, and I don't want to calculate the
stride every time I render a model, cached the value used when building the
arrays.
2012-05-15 21:08:45 +09:00
Bill Currie 15d35fbdc9 Add mvp_mat and some comments. 2012-05-15 21:08:45 +09:00
Bill Currie 59c5bf2f9e Code up an initial version of the iqm vertex shader.
Probably more bugs than an old kitchen cupboard :P
2012-05-15 21:08:45 +09:00
Bill Currie 6ab3bd45e5 Implement IQM animation loading.
Bone poses are converted to dual quaternions + shear + scale for nice
skinning. Will likely be slow for software skinning, but too bad.
2012-05-15 21:08:45 +09:00
Bill Currie 9a3206795e Add VectorUnshear().
VectorUnshear uses the exact same shear vector to remove shear from a
sheared vector. ie with:
  VectorShear (shear, v, w);
  VectorUnshear (shear, w, x);
x == v within fp math limits.
2012-05-15 21:08:44 +09:00
Bill Currie bf38e6073e Implement iqm joint loading. 2012-05-15 21:08:44 +09:00
Bill Currie 9f253454e4 Implement and test Mat4Inverse(). 2012-05-15 21:08:44 +09:00
Bill Currie fa6270322f Make Mat4Decompose a little more intuitive.
Params are now in application order (good thing not much code uses it yet).
2012-05-15 21:08:44 +09:00
Bill Currie 1473dbd526 Add a comment about the evaluation order in VectorShear. 2012-05-15 21:08:44 +09:00
Bill Currie de131c18ad Add VectorShear and really test Mat4Decompose.
And the tests really exercised VectorShear (first attempt had things
messed up when more than one shear value was non-zero). Also,
Mat4Decompose wasn't orthogonalizing the z axis row. Oops. Anyway,
Mat4Decompose is now known to work well, and the usage of its output is
understood :)
2012-05-15 21:08:44 +09:00
Bill Currie 8cea6b0a1e Fix a scaling snafu in Mat4Decompose.
Found when checking how rotation affects non-uniform scaling (haven't
written proper tests yet: need to figure out how).
2012-05-15 21:08:44 +09:00
Bill Currie 82abd5e426 More matrix tests. 2012-05-15 21:08:44 +09:00
Bill Currie 730f9668bd Add support for mat4 * vec3 2012-05-15 21:08:44 +09:00
Bill Currie 50af8a562e Add tests for matrix decomposition and fix the bugs. 2012-05-15 21:08:44 +09:00
Bill Currie 52ab4f64f9 Add code for loading vertex colors.
And correct an oopsie in bledweights.
2012-05-15 21:08:44 +09:00
Bill Currie 724427a976 Add component-wise vector and quaternion division.
Mostly for non-uniform scaling.
2012-05-15 21:08:44 +09:00
Bill Currie 215d2e9747 Add a function to decompose a matrix.
The function gives rotation(quaternion), scale, shear, and translation (all
three as vectors), shear is (XY, XZ, YZ).
2012-05-15 21:08:44 +09:00
Bill Currie 1be9384f10 Load the iqm vertex and triangle data.
Still have the meshes, joints and animations to go.
2012-05-15 21:08:43 +09:00
Bill Currie 890223ef8e Correct the definition of DualQuatNorm.
I'd gotten the norm and magnitude mixed up (partly because the document I
was following got the names mixed up), and then munged the formulas
together.
2012-05-15 21:08:43 +09:00
Bill Currie 8aabb704d2 Add tests for inverting a dual quad transform. 2012-05-15 21:08:43 +09:00
Bill Currie f874aeb941 Add support for duals and dual quaternions.
Not everything is unit-tested, but the currently important stuff is.
2012-05-15 21:08:43 +09:00
Bill Currie 3b938592c3 Dump some gl limits. 2012-05-15 21:08:43 +09:00
Bill Currie 26a878da48 Stub out the iqm loader. 2012-05-15 21:08:43 +09:00
Bill Currie e6c0512f31 Ensure dstring has space for terminating 0.
It seems (some versions of) windows vsnprintf don't count the terminating 0
when limiting the number of chars written to the buffer. Nor do they
guarantee the output string will be terminated.
2012-05-10 14:48:43 +09:00
Bill Currie 0036a5e113 Ensure edict_size is never 0.
Avoids division by / in NUM_FOR_EDICT
2012-05-06 21:35:42 +09:00
Bill Currie 1dd5cccda2 Correct some more error messages. 2012-05-06 18:52:05 +09:00
Bill Currie a0788c6cdf Implement constant folding for unary operators.
Including conversions between float and int :)
2012-05-06 18:49:07 +09:00
Bill Currie f781e9078c Correct some typos in error messages. 2012-05-06 18:43:18 +09:00
Bill Currie 954e03c3f7 Report the correct function name for the largest locals.
I must have been tired when I adapted that code.

* taniwha dons brown paper bag
2012-05-06 13:02:11 +09:00
Bill Currie 95a06c20b2 Move qfcc's libs and headers to ${prefix}/share
On discussion with Despair, share makes more sense than lib as they are
really cross-platform (though qfcc itself is not).
2012-05-05 19:34:35 +09:00
Bill Currie 9b07f9adcd Change the default renderer to gl.
Until glsl starts looking good, anyway.
2012-05-05 18:39:25 +09:00
Bill Currie 55ecf94f2d Don't draw arrows leaving return statements.
Return statements never flow to the next block (or any other block, for
that matter), so drawing arrows leaving them not only messes up dot's
graphs, but is quite missleading.
2012-05-05 18:04:10 +09:00
Bill Currie 099d9ec3f2 Move the increment of order out of the loop.
I don't know what gcc's optimizations would do with it, but it seems quite
reasonable to pull the code out of the loop by hand.
2012-05-05 18:01:00 +09:00
Bill Currie cf5c9f067f Make GL_DrawAliasShadow const correct.
Despair's having troubles with segfaults that I can't reproduce. If it's a
strict aliasing problem, this might help.
2012-05-05 17:55:30 +09:00
Bill Currie 56410ddc58 Prevent merged if/goto losing its way.
When mering if/goto (ie, if skipping a goto), the rest of the dead code
remover is used to delete the goto. That part of the code unuses the goto's
label. The if was getting the goto's label without the lable's used count
being incremented (the usaged temporarily increases by one). I have no idea
why the problem showed up randomly, but this seems to fix it (it fixes /a/
bug, anyway).
2012-05-04 22:35:20 +09:00
Bill Currie 953e789db2 Handle movement of the final block.
Moving a final block caused segfaults and weird flow graph corruptions.
2012-05-04 19:48:32 +09:00
Bill Currie e8c17c68e6 Fix a segfault when the switch expression errors. 2012-05-04 18:13:11 +09:00
Bill Currie 5df25133b3 Implement code movement for unconditional jumps.
That is, when the destination of the jump is reachable via only the jump.
2012-05-04 18:00:05 +09:00
Bill Currie 33bfac0508 Process all basic blocks for jump threading.
I'd copied the for loop from the dead block removal code, but jump
threading doesn't need to look at the following block...
2012-05-04 14:10:30 +09:00
Bill Currie f169a7732d Factor out label unuse.
I expect to need this more often in the future.
2012-05-04 14:01:39 +09:00
Bill Currie d2da3b8246 Update old test for new syntax. 2012-05-04 11:04:58 +09:00
Bill Currie 75aa28cfac Mark all subsequent blocks as reachable after if/goto merge.
If an if/goto merge is done in the first dead block pass, no blocks after
the merge have their rechable flag set because they've never been tested.
2012-05-04 10:58:18 +09:00
Bill Currie 8ddd58f951 Fix the dropping of the block after the merged if/goto.
The naive implementation of the if/goto merging was letting the old target
of the if get dropped because the block would lose its label and thus be
judged unreachable because the preceeding goto block was still in the list.
Instead, when the if/goto are "merged", mark the goto block as unreachable,
the following block as reachable, and break out of the analysis loop to
force the removal of the goto block. Since the dead block removal function
loops until no action is taken, all other dead blocks will be removed.
2012-05-04 10:07:55 +09:00
Bill Currie e866619de6 Output basic block flow diagrams to files.
The output can be controlled via --block-dot (not yet documented). The
files a named <sourcefile>.<function>.<stage>.dot. Currently, stage will be
one of "initial" (after expression to statement conversion), "thread"
(after jump threading), "dead" (after dead block removal), "final" (final
state before actual code emission).
2012-05-04 09:45:51 +09:00