3
SceneBuild::~SceneBuild()
11
if(!model.load_3ds(GLMARK_DATA_PATH"/models/horse.3ds"))
14
model.calculate_normals();
15
model.convert_to_mesh(&mMesh);
19
mShader.load(GLMARK_DATA_PATH"/shaders/light-basic.vert",
20
GLMARK_DATA_PATH"/shaders/light-basic.frag");
22
mRotationSpeed = 36.0f;
28
mPartDuration = new double[mPartsQty];
29
mAverageFPS = new unsigned[mPartsQty];
30
mScoreScale = new float[mPartsQty];
32
mScoreScale[0] = 1.898f;
33
mScoreScale[1] = 0.540f;
35
mPartDuration[0] = 10.0;
36
mPartDuration[1] = 10.0;
38
memset(mAverageFPS, 0, mPartsQty * sizeof(*mAverageFPS));
45
void SceneBuild::unload()
51
void SceneBuild::start()
53
GLfloat lightAmbient[] = {0.0f, 0.0f, 0.0f, 1.0f};
54
GLfloat lightDiffuse[] = {0.8f, 0.8f, 0.8f, 1.0f};
55
GLfloat lightPosition[] = {20.0f, 20.0f, 10.0f, 1.0f};
56
GLfloat materialColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
60
// Load lighting and material uniforms
61
glUniform4fv(mShader.mLocations.LightSourcePosition, 1, lightPosition);
63
glUniform3fv(mShader.mLocations.LightSourceAmbient, 1, lightAmbient);
64
glUniform3fv(mShader.mLocations.LightSourceDiffuse, 1, lightDiffuse);
66
glUniform3fv(mShader.mLocations.MaterialColor, 1, materialColor);
70
mStartTime = SDL_GetTicks() / 1000.0;
71
mLastTime = mStartTime;
74
void SceneBuild::update()
76
mCurrentTime = SDL_GetTicks() / 1000.0;
77
mDt = mCurrentTime - mLastTime;
78
mLastTime = mCurrentTime;
80
mElapsedTime = mCurrentTime - mStartTime;
82
if(mElapsedTime >= mPartDuration[mCurrentPart])
84
mAverageFPS[mCurrentPart] = mCurrentFrame / mElapsedTime;
89
printf("Precompilation\n");
90
printf(" Vertex array FPS: %u\n", mAverageFPS[mCurrentPart]);
93
printf(" Vertex buffer object FPS: %u\n", mAverageFPS[mCurrentPart]);
97
if(mCurrentPart >= mPartsQty)
103
mRotation += mRotationSpeed * mDt;
108
void SceneBuild::draw()
110
// Load the ModelViewProjectionMatrix uniform in the shader
111
Matrix4f model_view(1.0f, 1.0f, 1.0f);
112
Matrix4f model_view_proj(mScreen.mProjection);
114
model_view.translate(0.0f, 0.0f, -2.5f);
115
model_view.rotate(2 * M_PI * mRotation / 360.0, 0.0f, 1.0f, 0.0f);
116
model_view_proj *= model_view;
118
glUniformMatrix4fv(mShader.mLocations.ModelViewProjectionMatrix, 1,
119
GL_FALSE, model_view_proj.m);
121
// Load the NormalMatrix uniform in the shader. The NormalMatrix is the
122
// inverse transpose of the model view matrix.
123
model_view.invert().transpose();
124
glUniformMatrix4fv(mShader.mLocations.NormalMatrix, 1,
125
GL_FALSE, model_view.m);
130
mMesh.render_array();