Skip to content

Commit

Permalink
Model Renderer|Scripting: Animated uniform variables for model shaders
Browse files Browse the repository at this point in the history
Each MobjAnimator now has its own set of uniform variables that are
passed to the model shader. The uniform variables are declared in
the asset metadata, and can be animated using Doomsday Script's
native Core.Animation methods.

Also cleaned up MobjAnimator a little internally.
  • Loading branch information
skyjake committed Aug 17, 2015
1 parent fe71c10 commit c3b493d
Show file tree
Hide file tree
Showing 8 changed files with 244 additions and 42 deletions.
8 changes: 8 additions & 0 deletions doomsday/apps/client/include/render/mobjanimator.h
Expand Up @@ -21,6 +21,7 @@

#include "render/modelrenderer.h"
#include <de/ModelDrawable>
#include <de/GLProgram>

/**
* Mobj-specific model animator.
Expand All @@ -29,6 +30,9 @@
*/
class MobjAnimator : public de::ModelDrawable::Animator
{
public:
DENG2_ERROR(DefinitionError);

public:
MobjAnimator(de::DotPath const &id, de::ModelDrawable const &model);

Expand All @@ -38,6 +42,10 @@ class MobjAnimator : public de::ModelDrawable::Animator

de::ddouble currentTime(int index) const;

void bindUniforms(de::GLProgram &program) const;

void unbindUniforms(de::GLProgram &program) const;

private:
DENG2_PRIVATE(d)
};
Expand Down
3 changes: 2 additions & 1 deletion doomsday/apps/client/include/render/rend_model.h
Expand Up @@ -29,6 +29,7 @@
#include <de/ModelDrawable>

class TextureVariantSpec;
class MobjAnimator;
struct vissprite_t;

/// Absolute maximum number of vertices per submodel supported by this module.
Expand Down Expand Up @@ -65,7 +66,7 @@ struct drawmodel2params_t
struct mobj_s const *object;
de::ModelDrawable const *model;
ModelRenderer::AuxiliaryData const *auxData;
de::ModelDrawable::Animator const *animator;
MobjAnimator const *animator;
};

DENG_EXTERN_C de::dbyte useModels;
Expand Down
2 changes: 1 addition & 1 deletion doomsday/apps/client/include/render/vissprite.h
Expand Up @@ -194,7 +194,7 @@ struct vispsprite_t
struct vispsprite_model2_s {
de::ModelDrawable const *model;
ModelAuxiliaryData const *auxData;
de::ModelDrawable::Animator const *animator;
MobjAnimator const *animator;
} model2;
} data;
};
Expand Down
6 changes: 4 additions & 2 deletions doomsday/apps/client/include/world/clientmobjthinkerdata.h
Expand Up @@ -52,6 +52,8 @@
//#define CLM_MAGIC1 0xdecafed1
//#define CLM_MAGIC2 0xcafedeb8

class MobjAnimator;

/**
* Private client-side data for mobjs. This includes any per-object state for rendering
* and client-side network state.
Expand Down Expand Up @@ -102,9 +104,9 @@ class ClientMobjThinkerData : public MobjThinkerData
*
* @return Animation state, or @c NULL if not drawn as a model.
*/
de::ModelDrawable::Animator *animator();
MobjAnimator *animator();

de::ModelDrawable::Animator const *animator() const;
MobjAnimator const *animator() const;

de::Matrix4f const &modelTransformation() const;

Expand Down

0 comments on commit c3b493d

Please sign in to comment.