Commit Graph
264 Commits
Author SHA1 Message Date
asarium 059e149590 Add dynamic action programming system
This system adds the code necessary for letting content creators specify
complex events by specifying a simple, program-like sequence of
operations that will be executed by the engine when a certain event is
triggered.
2021-01-05 18:26:10 +01:00
Goober5000 21f6591be2 some refactor and cleanup
1) modify and prune some turret function definitions
2) clean up KeldorKatarn's submodel orientation parsing
2020-12-24 22:50:49 -05:00
Goober5000 8ef92c944d move gun_submodel_rotation from model to instance
Since instance-specific fields have been moved to polymodel_instance and submodel_instance, the gun_submodel_rotation field should also be moved.  This is also reworked a bit to keeping track of the rotation via the normal submodel instance angles.

This removes an unnecessary look_at field as well.
2020-12-23 00:45:31 -05:00
Goober5000 c18b1b63fd another model to model_instance refactor
Remove arc information from bsp_info and move it to submodel_instance.  Add a model instance to each debris chunk to keep track of it.
2020-12-20 14:51:05 -05:00
Goober5000 88c1d8a02a consolidate model instance code 2020-12-18 01:32:43 -05:00
Goober5000 7c92dd9f7c hoist model_get and model_get_instance out of a bunch of functions 2020-12-16 11:55:31 -05:00
Goober5000 b803b9f15c consolidate functions 2020-12-08 19:54:31 -05:00
Goober5000 b90fc2b3ad numeric to boolean 2020-12-08 19:54:31 -05:00
Goober5000 f0799d245e tweaks 2020-12-08 19:54:24 -05:00
Goober5000 3fdc5a3784 cur_turn_rate -> current_turn_rate 2020-12-08 12:33:29 -05:00
asarium 9da5cc17a3 Add type safe handle for graphics buffers
This converts the previous plain-int type for a buffer handle to an
instance of our ID class which provides type safety.
2020-10-25 12:16:05 +01:00
Goober5000 156bc2c5d4 fix the way SEXPs check ship distances
Retail has a hud_find_target_distance function that returns the distance between the player position and a bounding box.  This is useful for the HUD because it shows the distance to the perimeter of an object like a jump node or a large ship.  However, this function was re-used for the `distance` SEXP, resulting in the awkward situation where the distance is measured from one ship's center to another ship's bounding box.  This can lead to unexpected results and it also means that the SEXP returns a different distance when the arguments are swapped.

This PR deprecates the original SEXP and introduces the new SEXPs `center-distance` and `bbox-distance` which use consistent methods for both ships.  It also renames the `distance-ship-subystem` SEXP to `center-distance-subsystem` and adds a new `bbox-distance-subsystem` SEXP.
2020-06-07 22:36:46 -04:00
Goober5000 3356edff2b warn if model paths do not have unique names 2020-04-28 00:16:06 -04:00
niffiwan 2833ae150f detail boxes can ignore default distance scaling
Add a submodel property that overrides the hard-coded distance
multipliers applied to the distances at which details boxes & spheres
are rendered. The distance multipliers are set by the "model detail"
setting in the options screen. Note that this is different to the LOD
distance multipliers which are not hard-coded.

This allows some more creative uses of detail boxes & spheres, e.g. to
stop models subobjects from being rendered when they're out of player
view. Past testing showed a reasonable performance improvement with
complicated models.

This is a submodel property rather than global, or a ship flag, to allow
flexibility, i.e. a single model could choose this option only for the
submodels that want to use detail boxes/spheres in this fashion, which
other detail boxes/spheres use the conventional approach.

Code & ideas originally from zookeeper, I've just packaged it up for
the PR.

This has been rebased & squashed based on feedback in the PR
2019-04-06 15:24:27 +10:00
CasparKielwein d901470880 remove unused functions in model/ code. 2018-12-28 10:29:22 +01:00
asarium 8f4d51b14a Convert ade_get_args to variadic template based solution
This maintains the type information which can be used for enforce
const-correctness and also for implementing more advanced ways of
handling the type information.
2018-09-26 19:15:42 +02:00
asarium 8f06e338a4 Add typesafe handle types and use it in game sound system
This adds a new class which allows to create type safe resource handle
types. At the moment, the engine uses ints pretty much everywhere for
providing handles to resources created by the specific subsystems. Since
all ints are the same to the C/C++ typesystem it is perfectly legal to
pass a sound handle to the graphics API as a buffer handle which will
obviously cause issues.

This adds a new type called "ID" which is a wrapper class for a generic
handle but with added type safety. An instance of this class cannot be
passed to a function expecting another type of handle which provided
compile-time type safety for these APIs.

As an initial test I converted the game sound handles to this new type.
I already found a bug in the mainhall system thanks to this new type.
The mainhall used the game sound handles as sound instance handles which
probably meant that that specific code never really worked right. I
removed the code since there was no better alternative for fixing it.
2018-04-22 16:22:45 +02:00
asarium 31931777bc Fix stencil rendering in hardpoint rendering
There were actually multiple issues here. The addition of color mask and
stencil state to the material system overwrote the state set by the
hardpoint renderer so the stencil buffer was never written or read
correctly. I fixed this by introducing three new model render flags
(there were a few open slots in the bit mask so I used those) which set
the correct state using the material system. That also makes setting up
the rendering environment much easier.

Second, gr_opengl_stencil_set used mixed up parameter values which were
probably broken when I introduced more detailed stencil state tracking.
I restored those values to how they were in 3.8.

This fixes the other issue reported in #1640.
2018-03-05 14:28:59 +01:00
Fabian Woltermann 3b21b2469f A clean, up-to-date patch of the new lab code 2018-02-14 16:19:38 +01:00
asarium acc018507b Pack vertex and index data into one buffer
This changes the model loading code such that all index and vertex data
is packed in a single GPU buffer for each data type (index and vertex
data are still in separate buffers). This reduces the amount of buffer
rebinding needed when rendering a scene which will reduce the CPU
overhead. Furthermore, this opens up possibilities of future
improvements for which it is beneficial if all data is in the same
buffer (e.g. MultiDrawIndirect rendering).

To manage where to put the data in the GPU buffer I implemented a
custom HeapAllocator which manages where data can be put. It uses a very
primitive first-fit algorithm but that is sufficient for this usage
type. This does add quite a lot of overhead while allocating GPU model
data (I did some tracing and some allocation calls took as long as
130ms).

This fixes #1457.
2018-01-27 13:54:36 +01:00
asarium 7195ec9856 A few more fixes... 2017-01-04 00:28:22 +01:00
Fabian Woltermann dd6e706412 Merge pull request #1125 from asarium/cleanup/stringConst
Fix some string literal conversion warnings
2017-01-03 08:45:51 +01:00
Samuel Cho 347dca5e60 Renamed draw_list to a more descriptive model_draw_list. Removed unlit maps since those aren't needed anymore. Changed transforms in model_draw_list to use the transform_stack instead of using duplicate code. Removed some unused graphics code. Fixed scaling when using batched transforms. 2017-01-02 20:15:37 -08:00
asarium 9a8bfc0217 More const correctness 2017-01-02 13:17:59 +01:00
asarium 3fb6b7c51c Fix member initialization order of polymodel 2016-12-14 11:05:51 +01:00
niffiwan a9261477ba Add func def to .h & remove extern 2016-10-03 22:31:56 +10:00
SamuelCho c67f7b66aa Reconciled changes with new shield rendering code. 2016-08-31 00:34:26 -07:00
SamuelCho b75a354505 Cleaned up more rendering code. Shrunk the vertex struct since we don't use spec_rgb anymore. Removed any declarations using the old geometry batcher. Streamlined desaturation in the model shader to use the main color uniform. Removed old unneeded interp_ code. Removed stored geometry shader parameters from the shader constants since we're no longer using the EXT version of geometry shaders. 2016-08-30 23:22:09 -07:00
SamuelCho 17bd4a2fa8 Reconciled shield changes with recent changes. 2016-08-30 20:36:08 -07:00
SamuelCho ba826df963 Removed a bunch of unused rendering code. 2016-08-28 18:47:34 -07:00
SamuelCho bb78e74646 Improved shields. Added shield decal rendering technique. Fixed inaccurate shield normals and shield collision detection timing. Bumped up shield impacts count to 200. 2016-08-28 15:36:10 -07:00
asarium beb9288c73 Merge branch 'opengl_core_materials' of https://github.com/SamuelCho/fs2open.github.com into ogl_core/merge
Conflicts:
	code/graphics/gropengl.cpp
	code/io/cursor.cpp
	freespace2/SDLGraphicsOperations.cpp
2016-08-23 16:05:28 +02:00
Fabian Woltermann 6a1aa4c5d3 More cleanup 2016-08-19 20:59:01 +02:00
Fabian Woltermann 9f27973147 Fixes various bugs 2016-08-19 19:23:55 +02:00
Fabian Woltermann 1acfaa8157 Converts model subsystem flags 2016-08-19 14:59:15 +02:00
SamuelCho a481999a24 OpenGL Core support. Introduction of material based draw system. Rewrote geometry batcher. 2016-08-17 00:13:19 -07:00
Fabian Woltermann e1ba2256ed Changes the subsystem flags to the new flag system. 2016-08-13 13:52:51 +02:00
SamuelCho 1ef7688fa1 Strip out unused rendering code. 2016-07-10 19:29:11 -07:00
SamuelCho dd73d8fb63 New lighting model based off of Blinn-Phong and Fresnel-Shlick. Introduced -reflect maps. New gloss parameters for specular power. High dynamic range rendering. Improved bloom pass. 2016-07-05 23:15:08 -07:00
Goober5000 e302f0e456 convert the rest of the model instance functions to have model_instance_num parameters instead of object parameters 2016-02-10 23:23:44 -05:00
Goober5000 471c898df5 modify function headers as suggested in PR #530 2016-02-06 15:46:06 -05:00
Goober5000 df41bbe172 refactor of dumb_rotation to intrinsic_rotation
This is a renaming of the Dumb_rotation infrastructure, which is now called Intrinsic_rotation.  Intrinsic rotations are automatically applied to submodels without the need for an associated subsystem.  Dumb rotations are now a type of intrinsic rotation, and look_at rotations will be added in a future PR.  The same code will handle both; the only difference is in how the intrinsic rotation is calculated.  (In the case of dumb-rotation, it is calculated the same way as normal rotation; in the case of look-at, it will be calculated using submodel_look_at.)
2016-02-05 12:40:55 -05:00
Goober5000 81ad6dc1b5 remove a field that is now redundant 2016-01-05 01:04:46 -05:00
Goober5000 025c58c679 fix const-correctness due to Swifty's change 2016-01-05 00:56:51 -05:00
Goober5000 8f224a76a4 incorporate turning rate 2016-01-04 23:34:30 -05:00
Goober5000 a640015afc tweak the creation of dumb_rotate instances; move the check for can_move below look_at and dumb_rotate 2016-01-04 23:34:29 -05:00
Goober5000 97924c0628 Add data structures and the hook to create the dumb rotations when model instances are created. This might be sufficient to get dumb rotations working for ships. 2016-01-04 23:34:28 -05:00
Goober5000 680ac9175f move the two dumb_rotation iterations into one function (which calls a subfunction) in modelread.cpp, and add some descriptive commenting 2016-01-04 23:34:28 -05:00
Goober5000 e3c4f90287 first chunk of work to reimplementing dumb_rotate in a way that syncs with the rest of the model code 2016-01-04 23:34:27 -05:00
SamuelCho 4a4486c9be Merge branch 'master' into kill_ship_model_start 2016-01-03 13:02:47 -08:00