diff --git a/libraries/gpu/src/gpu/Context.h b/libraries/gpu/src/gpu/Context.h index 856ced3d78..394ac463ee 100644 --- a/libraries/gpu/src/gpu/Context.h +++ b/libraries/gpu/src/gpu/Context.h @@ -64,17 +64,11 @@ public: virtual void recycle() const = 0; virtual void downloadFramebuffer(const FramebufferPointer& srcFramebuffer, const Vec4i& region, QImage& destImage) = 0; - // UBO class... layout MUST match the layout in Transform.slh - class TransformCamera { - public: - mutable Mat4 _view; - mutable Mat4 _viewInverse; - mutable Mat4 _projectionViewUntranslated; - Mat4 _projection; - mutable Mat4 _projectionInverse; - Vec4 _viewport; // Public value is int but float in the shader to stay in floats for all the transform computations. - mutable Vec4 _stereoInfo; + // Shared header between C++ and GLSL +#include "TransformCamera_shared.slh" + class TransformCamera : public _TransformCamera { + public: const Backend::TransformCamera& recomputeDerived(const Transform& xformView) const; TransformCamera getEyeCamera(int eye, const StereoState& stereo, const Transform& xformView) const; }; diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index b9b8544601..50c0bc13ed 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -11,20 +11,14 @@ <@def GPU_TRANSFORM_STATE_SLH@> <@func declareStandardCameraTransform()@> -struct TransformCamera { - mat4 _view; - mat4 _viewInverse; - mat4 _projectionViewUntranslated; - mat4 _projection; - mat4 _projectionInverse; - vec4 _viewport; - vec4 _stereoInfo; -}; +<@include gpu/TransformCamera_shared.slh@> + +#define TransformCamera _TransformCamera layout(std140) uniform transformCameraBuffer { #ifdef GPU_TRANSFORM_IS_STEREO #ifdef GPU_TRANSFORM_STEREO_CAMERA - TransformCamera _camera[2]; + TransformCamera _camera[2]; #else TransformCamera _camera; #endif diff --git a/libraries/gpu/src/gpu/TransformCamera_shared.slh b/libraries/gpu/src/gpu/TransformCamera_shared.slh new file mode 100644 index 0000000000..6de17f1134 --- /dev/null +++ b/libraries/gpu/src/gpu/TransformCamera_shared.slh @@ -0,0 +1,26 @@ +// glsl / C++ compatible source as interface for FadeEffect +#ifdef __cplusplus +# define MAT4 Mat4 +# define VEC4 Vec4 +# define MUTABLE mutable +#else +# define MAT4 mat4 +# define VEC4 vec4 +# define MUTABLE +#endif + +struct _TransformCamera { + MUTABLE MAT4 _view; + MUTABLE MAT4 _viewInverse; + MUTABLE MAT4 _projectionViewUntranslated; + MAT4 _projection; + MUTABLE MAT4 _projectionInverse; + VEC4 _viewport; // Public value is int but float in the shader to stay in floats for all the transform computations. + MUTABLE VEC4 _stereoInfo; +}; + + // <@if 1@> + // Trigger Scribe include + // <@endif@> +// +