mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0025556: Visualization - support stereo pair formats recognized by consumer display devices
Graphic3d_StereoMode - add new enumeration for stereoscopic outputs: - Graphic3d_StereoMode_QuadBuffer - Graphic3d_StereoMode_Anaglyph - Graphic3d_StereoMode_RowInterlaced - Graphic3d_StereoMode_ColumnInterlaced - Graphic3d_StereoMode_ChessBoard - Graphic3d_StereoMode_SideBySide - Graphic3d_StereoMode_OverUnder Graphic3d_RenderingParams - add new options controlling stereo output: - StereoMode - ToReverseStereo - AnaglyphFilter OpenGl_ShaderManager - add predefined GLSL programs for new stereo outputs. OpenGl_Workspace::Redraw() - do not implicitly disable stereo to allow stereo dump as is. OpenGl_Caps - add flag swapInterval to control VSync. OpenGl_Workspace::BufferDump() - handle cases with non-applicable GL_PACK_ROW_LENGTH. CALL_DEF_WINDOW - drop unused fields; add fields "left" and "top" to reverse stereo pair for interlaced output depending on window position. Draw Harness, ViewerTest: - Extend syntax of command vstereo to setup stereo. - Extend vdump command to allow dump of stereoscopic pair in different formats. - Extend command vcaps with option vsync. - Use mouse scroll to zoom and adjust ZFocus in WinAPI. - Use "/" and "*" to adjust IOD. v3d/glsl/stereo - add test case for stereo modes. Cocoa_LocalPool, OSD_EnvironmentIterator - fix compilation issues on OS X Snow Leopard.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#define _OpenGl_ShaderManager_HeaderFile
|
||||
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Graphic3d_StereoMode.hxx>
|
||||
|
||||
#include <NCollection_DataMap.hxx>
|
||||
#include <NCollection_Sequence.hxx>
|
||||
@@ -161,15 +162,21 @@ public:
|
||||
&& myContext->BindProgram (myBlitProgram);
|
||||
}
|
||||
|
||||
//! Bind program for rendering Anaglyph image.
|
||||
Standard_Boolean BindAnaglyphProgram()
|
||||
//! Bind program for rendering stereoscopic image.
|
||||
Standard_Boolean BindStereoProgram (const Graphic3d_StereoMode theStereoMode)
|
||||
{
|
||||
if (myAnaglyphProgram.IsNull())
|
||||
if (theStereoMode < 0 || theStereoMode >= Graphic3d_StereoMode_NB)
|
||||
{
|
||||
prepareStdProgramAnaglyph();
|
||||
return Standard_False;
|
||||
}
|
||||
return !myAnaglyphProgram.IsNull()
|
||||
&& myContext->BindProgram (myAnaglyphProgram);
|
||||
|
||||
if (myStereoPrograms[theStereoMode].IsNull())
|
||||
{
|
||||
prepareStdProgramStereo (myStereoPrograms[theStereoMode], theStereoMode);
|
||||
}
|
||||
const Handle(OpenGl_ShaderProgram)& aProgram = myStereoPrograms[theStereoMode];
|
||||
return !aProgram.IsNull()
|
||||
&& myContext->BindProgram (aProgram);
|
||||
}
|
||||
|
||||
public:
|
||||
@@ -370,8 +377,9 @@ protected:
|
||||
//! Set pointer myLightPrograms to active lighting programs set from myMapOfLightPrograms
|
||||
Standard_EXPORT void switchLightPrograms();
|
||||
|
||||
//! Prepare standard GLSL program for Anaglyph image.
|
||||
Standard_EXPORT Standard_Boolean prepareStdProgramAnaglyph();
|
||||
//! Prepare standard GLSL program for stereoscopic image.
|
||||
Standard_EXPORT Standard_Boolean prepareStdProgramStereo (Handle(OpenGl_ShaderProgram)& theProgram,
|
||||
const Graphic3d_StereoMode theStereoMode);
|
||||
|
||||
protected:
|
||||
|
||||
@@ -383,7 +391,7 @@ protected:
|
||||
Handle(OpenGl_ShaderProgram) myBlitProgram; //!< standard program for FBO blit emulation
|
||||
OpenGl_MapOfShaderPrograms myMapOfLightPrograms; //!< map of lighting programs depending on shading model and lights configuration
|
||||
|
||||
Handle(OpenGl_ShaderProgram) myAnaglyphProgram; //!< standard program for Anaglyph image
|
||||
Handle(OpenGl_ShaderProgram) myStereoPrograms[Graphic3d_StereoMode_NB]; //!< standard stereo programs
|
||||
|
||||
OpenGl_Context* myContext; //!< OpenGL context
|
||||
|
||||
|
Reference in New Issue
Block a user