protot/src/modules/RenderModule.h

148 lines
2.5 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 eye;
Vector3f poi;
Vector3f up;
float near;
float far;
float fov;
bool orthographic;
float width;
float height;
2018-02-12 21:35:44 +01:00
Matrix44f mtxProj;
Matrix44f mtxView;
Camera() :
eye {5.f, 4.f, 5.f},
poi {0.f, 2.f, 0.f},
up {0.f, 1.f, 0.f},
near (0.1f),
far (150.f),
fov (60.f),
orthographic (false),
width (-1.f),
height (-1.f),
2018-02-12 21:35:44 +01:00
mtxProj (
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),
mtxView (
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();
};
struct Light {
2017-04-11 08:16:10 +02:00
Vector3f pos;
Vector3f dir;
float mtxView[16];
float mtxProj[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)),
mtxView {
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
},
mtxProj {
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 Renderer {
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;
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);
};