PANDORA: Make GLES context compatible with latest driver (FB only, no X11)
[mupen64plus-pandora.git] / source / mupen64plus-video-arachnoid / src / OpenGLManager.h
1 /******************************************************************************
2  * Arachnoid Graphics Plugin for Mupen64Plus
3  * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
4  *
5  * Copyright (C) 2009 Jon Ring
6  * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21  *****************************************************************************/
22
23 #ifndef OPEN_GL_Manager_H_
24 #define OPEN_GL_Manager_H_
25
26 //OpenGL includes
27 #include "m64p.h"
28 #include "OpenGL.h"
29
30 //*****************************************************************************
31 //* OpenGL Manager Class                                                        
32 //! Singelton class for initializing OpenGL and contolling OpenGL states. 
33 //*****************************************************************************
34 class OpenGLManager
35 {
36 public: 
37
38     //Destructor
39     ~OpenGLManager();
40
41     //Singleton Instance
42     static OpenGLManager& getSingleton()
43     {
44         static OpenGLManager instance;
45         return instance;
46     }
47
48     //Functions
49     bool initialize(bool fullscreen, int width, int height, int bitDepth, int refreshRate, bool vSync, bool hideCursor);
50     void dispose();
51     void resize(int width, int height, int bitDepth, int refreshRate);
52     bool toggleFullscreen();
53     void beginRendering();
54     void endRendering();
55
56     //Fog
57     void setFogEnabled(bool fog);    
58     bool getFogEnabled();
59
60     //Light
61     void setLighting(bool lighting);
62     bool getLightingEnabled();
63
64     //Textureing
65     void setTextureing2D(bool textureing);
66     bool getTextureing2DEnabled();
67
68     //Depth Testing
69     void setZBufferEnabled(bool enable);
70     bool getZBufferEnabled();    
71
72     //Alpha Test
73     void setAlphaTest(bool alphaTestEnable);
74     bool getAlphaTestEnabled();
75
76     //Wireframe
77     void setWireFrame(bool wireframe);    
78
79     //Culling
80     void setCullMode(bool cullFront, bool cullBack);
81     void setForceDisableCulling(bool force) { m_forceDisableCulling = force; }
82          
83     //Set Viewport
84     void setViewport(int x, int y, int width, int height, float zNear=0.0f, float zFar=1.0f);
85
86     //Set Scissor
87     void setScissorEnabled(bool enable);
88     bool getScissorEnabled();    
89     void setScissor(int x, int y, int width, int height);
90  
91     //! Sets the backround color of OpenGL viewport 
92     void setClearColor(float r, float g, float b) { glClearColor(r, g, b, 1.0f); }
93
94     //Set callback from the M64P core
95     void setRenderingCallback(void(*callback)(int)) { m_renderingCallback = callback; }
96         
97         //Set draw flag for rendering callback
98         void setDrawFlag() { m_drawFlag = 1; }
99
100 public:
101
102     //N64 Specifics
103     void calcViewScale(int viWidth, int viHeight);
104     float getViewScaleX() { return m_scaleX; } 
105     float getViewScaleY() { return m_scaleY; }
106
107 public:
108
109     //Gets
110
111     int getWidth() { return m_width; }
112     int getHeight() { return m_height; }
113     bool getFullscreen() { return m_fullscreen; }
114
115 private:
116
117      //Constructor
118     OpenGLManager();          
119
120 private:
121
122     bool m_wireframe;            //!< Wireframe mode enabled?
123     bool m_lighting;             //!< Lighting enabled?
124     int m_width;                 //!< Display widht
125     int m_height;                //!< Display height
126     int m_bitDepth;              //!< Fullscreen bitdepth
127     int m_refreshRate;           //!< Fullscreen refresh rate 
128     float m_scaleX;              //!< DisplayWidth aka WindowWidth / viWidth (n64 specific)
129     float m_scaleY;              //!< DisplayHeight aka WindowHeight / viHeight (n64 specific)
130     bool m_fullscreen;           //!< Fullscreen mode or window mode?
131     bool m_forceDisableCulling;  //!< Culling cant be enabled if this is true
132     
133     void (*m_renderingCallback)(int);  //Rendering callback from the core
134         int m_drawFlag;
135 };
136
137 #endif