Go to the documentation of this file.00001 #pragma once
00002
00003 #include <stdio.h>
00004 #include <windows.h>
00005 #include <vector>
00006 #include <math.h>
00007
00008 #define PI_OVER_360 0.0087266462599716478846184538424431
00009
00010
00011
00012
00013 #define STARTING_OBJECT_COUNT 1
00014 #define POSITION 0
00015 #define NORMAL 1
00016 #define TANGENT 2
00017 #define BITANGENT 3
00018 #define COLOR 4
00019 #define UV 5
00020 #define BONES 6
00021 #define WEIGHTS 7
00022
00023 #define ATTRIBUTE_COUNT 8
00024
00025 #define MAX_ACTIVE_LIGHTS 4
00026
00027 class Render : public IRender
00028 {
00029 public:
00030 Render(void);
00031 virtual ~Render(void);
00032
00033 bool init(HWND hwnd, int width, int heigth, RenderDesc& desc);
00034 void uninit(void);
00035
00036 void keepCurrentGeometry(void);
00037 void resetCurrentGeometry(void);
00038
00039 pIGeometry createGeometry(MeshData& meshData);
00040 pITexture createTexture(TextureData& textureData);
00041 void createSkyBox(TextureData&, TextureData&, TextureData&, TextureData&, TextureData&, TextureData&);
00042 pIControl createControl(pIGeometry geometry, pITexture texture);
00043 pIControl createButton(pIGeometry geometry, pITexture texture, void callback(pIControl));
00044
00045 void freeTexture(pITexture& texture);
00046 void freeGeometry(pIGeometry& geometry);
00047
00048 pInstance createDrawCall(pITexture texture, pIGeometry geometry, pIBody body);
00049 pInstance createColorDrawCall(pIGeometry geometry, pIBody body);
00050 void createGuiDrawCall(pIControl control);
00051 void clear(void);
00052 void update(Camera& camera);
00053 void updateScreenSize(int width, int height);
00054
00055 void toggleGui();
00056 bool guiIsShown() { return m_guiShown; }
00057 void setLight(int index, LightData& lightData);
00058
00059 void setEnableBlending(bool b) { m_enableBlending = b; }
00060 bool getEnableBlending(void) { return m_enableBlending; }
00061 void setEnableCulling(bool b) { m_enableCulling = b; }
00062 bool getEnableCulling(void) { return m_enableCulling; }
00063 void setEnableWireframe(bool b) { m_enableWireframe = b; }
00064 bool getEnableWireframe(void) { return m_enableWireframe; }
00065 void setEnableMipmap(bool b);
00066 bool getEnableMipmap() { return m_enableMipmap; }
00067 void setEnableLinearTexture(bool b);
00068 bool getEnableLinearTexture() {return m_enableLinearTexture; }
00069
00070 protected:
00071 virtual void initGLEW(void);
00072 virtual void reserveDeviceMemory(int width, int height, RenderDesc& desc);
00073 virtual const float4x4 getGuiMatrix(int width, int height);
00074
00075 private:
00076 GLuint m_vertexArray;
00077 GLuint m_vertexBuffer;
00078 GLuint m_indexBuffer;
00079 GLuint m_colorTexture;
00080 GLuint m_detailTexture;
00081 GLuint m_skyBox;
00082 GLuint m_sharpTexture;
00083 GLuint m_blurTexture;
00084 GLuint renderbufferDepth;
00085 GLuint framebufferSharp;
00086 GLuint framebufferBlur;
00087
00088 int m_vertexSize;
00089 int m_vertexCount;
00090 int m_indexCount;
00091 int m_textureCount;
00092
00093 RenderDesc* renderDesc;
00094
00095 struct {
00096 Shader shader;
00097 Uniform gui;
00098 Uniform guiTexIdx;
00099 Uniform guiColor;
00100 Uniform guiUVIndex;
00101 } gui;
00102
00103 struct {
00104 Shader shader;
00105 Uniform modelViewMat;
00106 Uniform projMat;
00107 } depthOnly;
00108
00109 struct {
00110 Shader shader;
00111 Uniform radius;
00112 Uniform texture;
00113 } blur;
00114
00115 struct {
00116 Shader shader;
00117 Uniform dof;
00118 Uniform sharp;
00119 Uniform blured;
00120 } depthOfField;
00121
00122 struct {
00123 Shader shader;
00124 Uniform modelViewMat;
00125 Uniform projMat;
00126 Uniform camPosition;
00127 Uniform skybox;
00128 } skybox;
00129
00130 struct {
00131 Shader shader;
00132 Uniform viewMat;
00133 Uniform modelViewMat;
00134 Uniform normalMat;
00135 Uniform projMat;
00136 Uniform texIdx;
00137 Uniform lightPositions;
00138 Uniform lightColors;
00139 Uniform colorArray;
00140 Uniform detailArray;
00141 Uniform cameraPosition;
00142 float4 lightPositionArray[MAX_ACTIVE_LIGHTS];
00143 float4 lightColorArray[MAX_ACTIVE_LIGHTS];
00144 } parallax;
00145
00146 struct {
00147 Shader shader;
00148 Uniform modelViewMat;
00149 Uniform normalMat;
00150 Uniform projMat;
00151 Uniform camPosition;
00152 Uniform environment;
00153 } glass;
00154
00155 int m_dRenderCount;
00156 int m_dRenderColorCount;
00157 int m_keepGeometryVertices;
00158 int m_keepGeometryIndices;
00159 int m_keepRenderCount;
00160 int m_keepColorRenderCount;
00161
00162 HWND m_hwnd;
00163 HDC m_hdc;
00164 HGLRC m_RC;
00165
00166 DrawCall* m_drawList;
00167 DrawCall* m_drawColorList;
00168 pIControl* m_guiDrawList;
00169
00170 int m_numGuiObjects;
00171 int m_keepGuiCount;
00172
00173 bool m_guiShown;
00174 bool m_enableBlending;
00175 bool m_enableCulling;
00176 bool m_enableWireframe;
00177 bool m_enableMipmap;
00178 bool m_enableLinearTexture;
00179
00180 pGeometry rectGeom;
00181 pGeometry cubeGeom;
00182 Vertex defaultRectVertices[4];
00183 ushort defaultRectIndices[6];
00184 Vertex defaultCubeVertices[8];
00185 ushort defaultCubeIndices[36];
00186
00187
00188
00189 };