mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 07:34:45 +00:00
Oculus VR DK2 Support
- Updated to work with 0.5.x SDK - Uses Oculus Rendering rather than PostFX - Stereo rendering refactored so more rendering info is grabbed from the DisplayDevice - Implements an Offscreen Canvas for in-game gui with oculus - Message dialogs and metrics display can now go to the OffScreen Canvas (if oculus demo is setup correctly)
This commit is contained in:
parent
b3170bcddf
commit
3a457749ec
56 changed files with 2654 additions and 1426 deletions
|
|
@ -213,6 +213,9 @@ public:
|
|||
/// The device is about to finish rendering a frame
|
||||
deEndOfFrame,
|
||||
|
||||
/// The device has rendered a frame and ended the scene
|
||||
dePostFrame,
|
||||
|
||||
/// The device has started rendering a frame's field (such as for side-by-side rendering)
|
||||
deStartOfField,
|
||||
|
||||
|
|
@ -244,7 +247,12 @@ public:
|
|||
enum GFXDeviceRenderStyles
|
||||
{
|
||||
RS_Standard = 0,
|
||||
RS_StereoSideBySide = (1<<0),
|
||||
RS_StereoSideBySide = (1<<0), // Render into current Render Target side-by-side
|
||||
};
|
||||
|
||||
enum GFXDeviceLimits
|
||||
{
|
||||
NumStereoPorts = 2
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
@ -277,7 +285,19 @@ protected:
|
|||
Point2F mCurrentProjectionOffset;
|
||||
|
||||
/// Eye offset used when using a stereo rendering style
|
||||
Point3F mStereoEyeOffset;
|
||||
Point3F mStereoEyeOffset[NumStereoPorts];
|
||||
|
||||
MatrixF mStereoEyeTransforms[NumStereoPorts];
|
||||
MatrixF mInverseStereoEyeTransforms[NumStereoPorts];
|
||||
|
||||
/// Fov port settings
|
||||
FovPort mFovPorts[NumStereoPorts];
|
||||
|
||||
/// Destination viewports for stereo rendering
|
||||
RectI mStereoViewports[NumStereoPorts];
|
||||
|
||||
/// Destination targets for stereo rendering
|
||||
GFXTextureTarget* mStereoTargets[NumStereoPorts];
|
||||
|
||||
/// This will allow querying to see if a device is initialized and ready to
|
||||
/// have operations performed on it.
|
||||
|
|
@ -323,10 +343,50 @@ public:
|
|||
void setCurrentProjectionOffset(const Point2F& offset) { mCurrentProjectionOffset = offset; }
|
||||
|
||||
/// Get the current eye offset used during stereo rendering
|
||||
const Point3F& getStereoEyeOffset() { return mStereoEyeOffset; }
|
||||
const Point3F* getStereoEyeOffsets() { return mStereoEyeOffset; }
|
||||
|
||||
const MatrixF* getStereoEyeTransforms() { return mStereoEyeTransforms; }
|
||||
const MatrixF* getInverseStereoEyeTransforms() { return mInverseStereoEyeTransforms; }
|
||||
|
||||
/// Set the current eye offset used during stereo rendering
|
||||
void setStereoEyeOffset(const Point3F& offset) { mStereoEyeOffset = offset; }
|
||||
void setStereoEyeOffsets(Point3F *offsets) { dMemcpy(mStereoEyeOffset, offsets, sizeof(Point3F) * NumStereoPorts); }
|
||||
|
||||
void setStereoEyeTransforms(MatrixF *transforms) { dMemcpy(mStereoEyeTransforms, transforms, sizeof(mStereoEyeTransforms)); dMemcpy(mInverseStereoEyeTransforms, transforms, sizeof(mInverseStereoEyeTransforms)); mInverseStereoEyeTransforms[0].inverse(); mInverseStereoEyeTransforms[1].inverse(); }
|
||||
|
||||
/// Set the current eye offset used during stereo rendering. Assumes NumStereoPorts are available.
|
||||
void setFovPort(const FovPort *ports) { dMemcpy(mFovPorts, ports, sizeof(mFovPorts)); }
|
||||
|
||||
/// Get the current eye offset used during stereo rendering
|
||||
const FovPort* getSteroFovPort() { return mFovPorts; }
|
||||
|
||||
/// Sets stereo viewports
|
||||
void setSteroViewports(const RectI *ports) { dMemcpy(mStereoViewports, ports, sizeof(RectI) * NumStereoPorts); }
|
||||
|
||||
/// Sets stereo render targets
|
||||
void setStereoTargets(GFXTextureTarget **targets) { mStereoTargets[0] = targets[0]; mStereoTargets[1] = targets[1]; }
|
||||
|
||||
RectI* getStereoViewports() { return mStereoViewports; }
|
||||
|
||||
/// Activates a stereo render target, setting the correct viewport to render eye contents.
|
||||
/// If eyeId is -1, set a viewport encompassing the entire size of the render targets.
|
||||
void activateStereoTarget(S32 eyeId)
|
||||
{
|
||||
if (eyeId == -1)
|
||||
{
|
||||
if (mStereoTargets[0])
|
||||
{
|
||||
setActiveRenderTarget(mStereoTargets[0], true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mStereoTargets[eyeId])
|
||||
{
|
||||
setActiveRenderTarget(mStereoTargets[eyeId], false);
|
||||
}
|
||||
setViewport(mStereoViewports[eyeId]);
|
||||
}
|
||||
}
|
||||
|
||||
GFXCardProfiler* getCardProfiler() const { return mCardProfiler; }
|
||||
|
||||
|
|
@ -722,8 +782,8 @@ public:
|
|||
/// Returns the number of simultaneous render targets supported by the device.
|
||||
virtual U32 getNumRenderTargets() const = 0;
|
||||
|
||||
virtual void setShader( GFXShader *shader ) {}
|
||||
virtual void disableShaders() {} // TODO Remove when T3D 4.0
|
||||
virtual void setShader( GFXShader *shader, bool force = false ) {}
|
||||
virtual void disableShaders( bool force = false ) {} // TODO Remove when T3D 4.0
|
||||
|
||||
/// Set the buffer! (Actual set happens on the next draw call, just like textures, state blocks, etc)
|
||||
void setShaderConstBuffer(GFXShaderConstBuffer* buffer);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue