protot/src/modules/RenderModule.h

156 lines
2.7 KiB
C
Raw Normal View History

#pragma once
#include <cstdint>
#include <map>
#include <vector>
#include "math_types.h"
2018-02-13 12:05:07 +01:00
#include <GL/gl3w.h> // This example is using gl3w to access OpenGL functions (because it is small). You may use glew/glad/glLoadGen/etc. whatever already works for you.
#include "Globals.h"
2018-02-13 12:05:07 +01:00
#include "RenderUtils.h"
struct Camera {
Vector3f mEye;
Vector3f mPoi;
Vector3f mUp;
float mNear;
float mFar;
float mFov;
bool mIsOrthographic;
float mWidth;
float mHeight;
Matrix44f mProjectionMatrix;
Matrix44f mViewMatrix;
Camera() :
mEye {5.f, 4.f, 5.f},
mPoi {0.f, 2.f, 0.f},
mUp {0.f, 1.f, 0.f},
mNear (0.1f),
mFar (150.f),
mFov (60.f),
mIsOrthographic (false),
mWidth (-1.f),
mHeight (-1.f),
mProjectionMatrix (
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
2018-02-12 21:35:44 +01:00
0.f, 0.f, 0.f, 1.f),
mViewMatrix (
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
2018-02-12 21:35:44 +01:00
0.f, 0.f, 0.f, 1.f)
{}
void UpdateMatrices();
void DrawGui();
};
struct Light {
2017-04-11 08:16:10 +02:00
Vector3f pos;
Vector3f dir;
float mViewMatrix[16];
float mProjectionMatrix[16];
float mtxLight[16];
float mtxShadow[16];
float shadowMapBias;
uint16_t shadowMapSize;
bool enabled;
float near;
float far;
float area;
Light() :
2017-04-11 08:16:10 +02:00
pos (Vector3f(0.f, 10.f, 10.f)),
dir (Vector3f(-1.f, -1.f, -1.f)),
mViewMatrix {
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f
},
mProjectionMatrix {
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f
},
mtxShadow {
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f
},
2016-11-10 21:29:47 +01:00
shadowMapBias (0.004f),
shadowMapSize (2048),
near (0.1f),
far (100.f),
area (10.f),
enabled (false)
{
}
};
2018-02-13 12:05:07 +01:00
struct Mesh {
GLuint mVertexArrayId = -1;
GLuint mVertexBuffer = -1;
};
struct RendererSettings;
struct Renderer {
RendererSettings* mSettings = nullptr;
2018-02-13 14:27:16 +01:00
bool mInitialized = false;
uint32_t mWidth = 1;
uint32_t mHeight = 1;
Camera mCamera;
2018-02-13 12:05:07 +01:00
Mesh mMesh;
Mesh mPlane;
Texture mDefaultTexture;
2018-02-16 21:22:34 +01:00
RenderProgram mDefaultProgram;
GLuint muDefaultModelViewProjection;
GLuint muDefaultColor;
RenderTarget mRenderTarget;
2018-02-13 14:27:16 +01:00
GLuint mRenderQuadVertexArrayId;
GLuint mRenderQuadVertexBufferId;
2018-02-15 09:59:38 +01:00
2018-02-13 14:27:16 +01:00
RenderProgram mRenderQuadProgramColor;
GLuint muRenderQuadModelViewProj;
2018-02-13 14:27:16 +01:00
GLuint muRenderQuadTexture;
GLuint muRenderQuadTime;
2018-02-15 09:59:38 +01:00
RenderProgram mRenderQuadProgramDepth;
GLuint muRenderQuadDepthModelViewProj;
2018-02-15 09:59:38 +01:00
GLuint muRenderQuadDepthNear;
GLuint muRenderQuadDepthFar;
Renderer() :
2018-02-13 14:27:16 +01:00
mInitialized(false),
mWidth (0),
mHeight (0)
2017-07-02 23:26:02 +02:00
{ }
2018-02-12 21:35:44 +01:00
void Initialize(int width, int height);
void Shutdown();
void RenderGl();
void RenderGui();
void Resize (int width, int height);
};