- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

# src/TaskBasedFlockSim/OpenglDriver.h

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011
    00012
    00013
    00014
    00015
    00016
    00017
    00018
    00019
    00020 #ifndef _OPENGL_DRIVER_H_
    00021 #define _OPENGL_DRIVER_H_
    00022
    00023 #include <boost\utility.hpp>
    00024
    00025 #include <windows.h>
    00026
    00027 #include "OpenglContext.h"
    00028 #include "OpenglVertexBuffer.h"
    00029 #include "OpenglIndexBuffer.h"
    00030 #include "OpenglProgram.h"
    00031 #include "OpenglTexture.h"
    00032
    00033 #include <vector>
    00034 #include <map>
    00035
    00038
    00039 namespace TestFrameWork
    00040 {
    00041
    00042 enum OpenglPrimitive
    00043 {
    00044         Triangles
    00045 };
    00046
    00047 enum OpenglVersion
    00048 {
    00049         OpenglVersion_2_0,
    00050         OpenglVersion_2_1,
    00051         OpenglVersion_3_0,
    00052         OpenglVersion_3_1,
    00053         OpenglVersion_3_2,
    00054 };
    00055
    00056 class OpenglDriver :
    00057         boost::noncopyable
    00058 {
    00059 public:
    00060         OpenglDriver(OpenglVersion version, HDC canvasContext, size_t width, size_t height, int depth, int samples);
    00061
    00062         ~OpenglDriver(void);
    00063
    00064         void BeginFrame(void);
    00065
    00066         void EndFrame(void);
    00067
    00068         size_t CreateVertexBuffer(Vertices vertices, size_t verticesCount);
    00069
    00070         size_t CreateIndexBuffer(Indices32 indices, size_t indicesCount);
    00071
    00072         OpenglProgramWeakPtr CreateProgram(const std::vector<ShaderFileDesc>& shaders);
    00073
    00074         OpenglTextureWeakPtr CreateTexture(TextureData data, OpenglTextureFormat format,
    00075                                                                            size_t width, OpenglTextureFilter filter,
    00076                                                                            OpenglTextureEdgeValue edge);
    00077
    00078         OpenglTextureWeakPtr CreateTexture(TextureData data, OpenglTextureFormat format,
    00079                                                                            size_t width, size_t height, OpenglTextureFilter filter,
    00080                                                                            OpenglTextureEdgeValue edge);
    00081
    00082         OpenglTextureWeakPtr CreateTexture(TextureData data, OpenglTextureFormat format,
    00083                                                                            size_t width, size_t height, size_t depth,
    00084                                                                            OpenglTextureFilter filter, OpenglTextureEdgeValue edge);
    00085
    00086         void SetProgram(OpenglProgramWeakPtr program);
    00087
    00088         void SetTexture(OpenglTextureWeakPtr texture, int textureUnit);
    00089
    00090         void DrawIndexedPrimitive(OpenglPrimitive primitive, size_t vertexBufferId, size_t indexBufferId,
    00091                                                           size_t primitivesCount = 1);
    00092
    00093         void GetMaximumTextureSize(OpenglTextureFormat format, size_t& width, size_t& height);
    00094
    00095         void Draw2DString(const std::string& s, size_t x, size_t y, const Vector3& color);
    00096
    00097 private:
    00098         OpenglVersion m_version;
    00099
    00100         HDC m_canvasContext;
    00101         size_t m_width;
    00102         size_t m_height;
    00103
    00104         OpenglContext m_openglContext;
    00105
    00106         std::vector<OpenglVertexBufferPtr> m_vertexBuffers;
    00107
    00108         std::vector<OpenglIndexBuffer32Ptr> m_indexBuffers;
    00109
    00110         std::vector<OpenglProgramPtr> m_programs;
    00111
    00112         std::vector<OpenglTexturePtr> m_textures;
    00113
    00114         OpenglProgramWeakPtr m_currentProgram;
    00115
    00116         std::map<OpenglTextureWeakPtr, int> m_textureUnits;
    00117
    00118         void InitializeGlew(void);
    00119
    00120         void InitializeGlut(void);
    00121
    00122         void CheckOpenglVersion(OpenglVersion version) const;
    00123
    00124         void CheckMinRequirements(OpenglVersion version) const;
    00125
    00126         GLenum Primitive2GlMode(OpenglPrimitive primitive) const;
    00127
    00128         void SetCurrentProgram(void) const;
    00129
    00130         void SetCurrentTextures(void) const;
    00131
    00132         void SetBuffers(OpenglVertexBufferPtr vertexBuffer, OpenglIndexBuffer32Ptr indexBuffer) const;
    00133 };
    00134
    00135 typedef boost::shared_ptr<OpenglDriver> OpenglDriverPtr;
    00136 }
    00137
    00138 #endif