diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-08-10 15:34:12 +0400 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-08-10 15:34:12 +0400 |
commit | 47c5b8ff269c3c365e8bc5adf5c0494bb29abf1f (patch) | |
tree | 94dbbf483871d2a6529c70cf4524f0d0e0f2cec8 /source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp | |
parent | 7c9b4e6f9a327551fca2d7bde951c4598cb0244b (diff) |
Fix blenderplayer command line option parsing.
Fix stereo rendering in vertex array mode. Added sidebyside & anaglyph stereo modes.
Diffstat (limited to 'source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp')
-rw-r--r-- | source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp | 137 |
1 files changed, 77 insertions, 60 deletions
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index 5f09846aa72..1a3f40491f7 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -55,11 +55,13 @@ RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas) :RAS_IRasterizer(canvas), m_2DCanvas(canvas), m_fogenabled(false), + m_time(0.0), + m_stereomode(RAS_STEREO_NOSTEREO), + m_curreye(RAS_STEREO_LEFTEYE), m_noOfScanlines(32), m_materialCachingInfo(0) { m_viewmatrix.Identity(); - m_stereomode = RAS_STEREO_NOSTEREO; } @@ -128,7 +130,6 @@ static void Myinit_gl_stuff(void) } glPolygonStipple(patc); - } @@ -144,6 +145,7 @@ bool RAS_OpenGLRasterizer::Init() m_alphaback = 0.0; glClearColor(m_redback,m_greenback,m_blueback,m_alphaback); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glShadeModel(GL_SMOOTH); @@ -257,6 +259,7 @@ void RAS_OpenGLRasterizer::Exit() glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glClearDepth(1.0); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClearColor(m_redback, m_greenback, m_blueback, m_alphaback); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDepthMask (GL_TRUE); @@ -339,29 +342,9 @@ int RAS_OpenGLRasterizer::GetDrawingMode() -void RAS_OpenGLRasterizer::SetDepthMask(int depthmask) +void RAS_OpenGLRasterizer::SetDepthMask(DepthMask depthmask) { - switch (depthmask) - { - case KX_DEPTHMASK_ENABLED: - { - glDepthMask(GL_TRUE); - //glDisable ( GL_ALPHA_TEST ); - break; - }; - case KX_DEPTHMASK_DISABLED: - { - glDepthMask(GL_FALSE); - //glAlphaFunc ( GL_GREATER, 0.0 ) ; - //glEnable ( GL_ALPHA_TEST ) ; - break; - }; - default: - { - //printf("someone made a mistake, RAS_OpenGLRasterizer::SetDepthMask(int depthmask)\n"); - exit(0); - } - } + glDepthMask(depthmask == KX_DEPTHMASK_DISABLED ? GL_FALSE : GL_TRUE); } @@ -380,47 +363,67 @@ void RAS_OpenGLRasterizer::ClearCachingInfo(void) void RAS_OpenGLRasterizer::EndFrame() { + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); m_2DCanvas->EndFrame(); } - void RAS_OpenGLRasterizer::SetRenderArea() { // only above/below stereo method needs viewport adjustment - if(m_stereomode == RAS_STEREO_ABOVEBELOW) - { - switch(m_curreye) - { - case RAS_STEREO_LEFTEYE: - // upper half of window - m_2DCanvas->GetDisplayArea().SetLeft(0); - m_2DCanvas->GetDisplayArea().SetBottom(m_2DCanvas->GetHeight() - - int(m_2DCanvas->GetHeight() - m_noOfScanlines) / 2); - - m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); - m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight())); - break; - case RAS_STEREO_RIGHTEYE: - // lower half of window - m_2DCanvas->GetDisplayArea().SetLeft(0); - m_2DCanvas->GetDisplayArea().SetBottom(0); - m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); - m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight() - m_noOfScanlines) / 2); - break; - } - } - else + switch (m_stereomode) { - // every available pixel - m_2DCanvas->GetDisplayArea().SetLeft(0); - m_2DCanvas->GetDisplayArea().SetBottom(0); - m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); - m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight())); + case RAS_STEREO_ABOVEBELOW: + switch(m_curreye) + { + case RAS_STEREO_LEFTEYE: + // upper half of window + m_2DCanvas->GetDisplayArea().SetLeft(0); + m_2DCanvas->GetDisplayArea().SetBottom(m_2DCanvas->GetHeight() - + int(m_2DCanvas->GetHeight() - m_noOfScanlines) / 2); + + m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); + m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight())); + break; + case RAS_STEREO_RIGHTEYE: + // lower half of window + m_2DCanvas->GetDisplayArea().SetLeft(0); + m_2DCanvas->GetDisplayArea().SetBottom(0); + m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); + m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight() - m_noOfScanlines) / 2); + break; + } + break; + case RAS_STEREO_SIDEBYSIDE: + switch (m_curreye) + { + case RAS_STEREO_LEFTEYE: + // Left half of window + m_2DCanvas->GetDisplayArea().SetLeft(0); + m_2DCanvas->GetDisplayArea().SetBottom(0); + m_2DCanvas->GetDisplayArea().SetRight(m_2DCanvas->GetWidth()/2); + m_2DCanvas->GetDisplayArea().SetTop(m_2DCanvas->GetHeight()); + break; + case RAS_STEREO_RIGHTEYE: + // Right half of window + m_2DCanvas->GetDisplayArea().SetLeft(m_2DCanvas->GetWidth()/2); + m_2DCanvas->GetDisplayArea().SetBottom(0); + m_2DCanvas->GetDisplayArea().SetRight(m_2DCanvas->GetWidth()); + m_2DCanvas->GetDisplayArea().SetTop(m_2DCanvas->GetHeight()); + break; + } + break; + default: + // every available pixel + m_2DCanvas->GetDisplayArea().SetLeft(0); + m_2DCanvas->GetDisplayArea().SetBottom(0); + m_2DCanvas->GetDisplayArea().SetRight(int(m_2DCanvas->GetWidth())); + m_2DCanvas->GetDisplayArea().SetTop(int(m_2DCanvas->GetHeight())); + break; } } -void RAS_OpenGLRasterizer::SetStereoMode(const int stereomode) +void RAS_OpenGLRasterizer::SetStereoMode(const StereoMode stereomode) { m_stereomode = stereomode; } @@ -436,14 +439,28 @@ bool RAS_OpenGLRasterizer::Stereo() } -void RAS_OpenGLRasterizer::SetEye(int eye) +void RAS_OpenGLRasterizer::SetEye(StereoEye eye) { m_curreye = eye; - if(m_stereomode == RAS_STEREO_QUADBUFFERED) { - if(m_curreye == RAS_STEREO_LEFTEYE) - glDrawBuffer(GL_BACK_LEFT); - else - glDrawBuffer(GL_BACK_RIGHT); + switch (m_stereomode) + { + case RAS_STEREO_QUADBUFFERED: + glDrawBuffer(m_curreye == RAS_STEREO_LEFTEYE ? GL_BACK_LEFT : GL_BACK_RIGHT); + break; + case RAS_STEREO_ANAGLYPH: + if (m_curreye == RAS_STEREO_LEFTEYE) + { + glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); + m_2DCanvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER); + glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE); + } else { + glAccum(GL_LOAD, 1.0); + glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); + ClearDepthBuffer(); + } + break; + default: + break; } } |