Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h18
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp137
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h20
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp11
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h1
5 files changed, 95 insertions, 92 deletions
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index 21e47e12050..60edec7ada9 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -61,7 +61,7 @@ public:
/**
* Drawing types
*/
- enum {
+ enum DrawType {
KX_BOUNDINGBOX = 1,
KX_WIREFRAME,
KX_SOLID,
@@ -72,7 +72,7 @@ public:
/**
* Valid SetDepthMask parameters
*/
- enum {
+ enum DepthMask {
KX_DEPTHMASK_ENABLED =1,
KX_DEPTHMASK_DISABLED
};
@@ -87,16 +87,18 @@ public:
/**
* Stereo mode types
*/
- enum {
+ enum StereoMode {
RAS_STEREO_NOSTEREO = 1,
RAS_STEREO_QUADBUFFERED,
RAS_STEREO_ABOVEBELOW,
- RAS_STEREO_INTERLACED
+ RAS_STEREO_INTERLACED,
+ RAS_STEREO_ANAGLYPH,
+ RAS_STEREO_SIDEBYSIDE
};
/**
* Render pass identifiers for stereo.
*/
- enum {
+ enum StereoEye {
RAS_STEREO_LEFTEYE = 1,
RAS_STEREO_RIGHTEYE
};
@@ -105,7 +107,7 @@ public:
* SetDepthMask enables or disables writing a fragment's depth value
* to the Z buffer.
*/
- virtual void SetDepthMask(int depthmask)=0;
+ virtual void SetDepthMask(DepthMask depthmask)=0;
/**
* SetMaterial sets the material settings for subsequent primitives
* to be rendered with.
@@ -145,7 +147,7 @@ public:
/**
* SetStereoMode will set the stereo mode
*/
- virtual void SetStereoMode(const int stereomode)=0;
+ virtual void SetStereoMode(const StereoMode stereomode)=0;
/**
* Stereo can be used to query if the rasterizer is in stereo mode.
* @return true if stereo mode is enabled.
@@ -154,7 +156,7 @@ public:
/**
* Sets which eye buffer subsequent primitives will be rendered to.
*/
- virtual void SetEye(const int eye)=0;
+ virtual void SetEye(const StereoEye eye)=0;
/**
*/
virtual void SetEyeSeparation(const float eyeseparation)=0;
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;
}
}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
index 509e4c63c93..4e63697b7ed 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
@@ -65,14 +65,12 @@ class RAS_OpenGLRasterizer : public RAS_IRasterizer
float m_blueback;
float m_alphaback;
- bool m_bEXT_compiled_vertex_array;
-
double m_time;
MT_CmMatrix4x4 m_viewmatrix;
MT_Point3 m_campos;
- int m_stereomode;
- int m_curreye;
+ StereoMode m_stereomode;
+ StereoEye m_curreye;
float m_eyeseparation;
float m_focallength;
int m_noOfScanlines;
@@ -87,9 +85,7 @@ public:
RAS_OpenGLRasterizer(RAS_ICanvas* canv);
virtual ~RAS_OpenGLRasterizer();
-
-
- enum
+ /*enum DrawType
{
KX_BOUNDINGBOX = 1,
KX_WIREFRAME,
@@ -98,12 +94,12 @@ public:
KX_TEXTURED
};
- enum
+ enum DepthMask
{
KX_DEPTHMASK_ENABLED =1,
KX_DEPTHMASK_DISABLED,
- };
- virtual void SetDepthMask(int depthmask);
+ };*/
+ virtual void SetDepthMask(DepthMask depthmask);
virtual void SetMaterial(const RAS_IPolyMaterial& mat);
virtual bool Init();
@@ -114,9 +110,9 @@ public:
virtual void EndFrame();
virtual void SetRenderArea();
- virtual void SetStereoMode(const int stereomode);
+ virtual void SetStereoMode(const StereoMode stereomode);
virtual bool Stereo();
- virtual void SetEye(const int eye);
+ virtual void SetEye(const StereoEye eye);
virtual void SetEyeSeparation(const float eyeseparation);
virtual void SetFocalLength(const float focallength);
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
index f78448d2cc4..f01d76bd8d2 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
@@ -212,14 +212,3 @@ void RAS_VAOpenGLRasterizer::EnableTextures(bool enable)
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
-bool RAS_VAOpenGLRasterizer::Stereo()
-{
-/*
- if(m_stereomode == RAS_STEREO_NOSTEREO)
- return false;
- else
- return true;
-*/
- return false;
-}
-
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
index 6a44d36277b..d0fd6006ab6 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
@@ -43,7 +43,6 @@ public:
virtual bool Init();
virtual void Exit();
- virtual bool Stereo();
virtual void SetDrawingMode(int drawingmode);
virtual void IndexPrimitives( const vecVertexArray& vertexarrays,