xref: /aosp_15_r20/cts/tests/openglperf2/jni/reference/scene/Scene.cpp (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright (C) 2013 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5*b7c941bbSAndroid Build Coastguard Worker  * in compliance with the License. You may obtain a copy of the License at
6*b7c941bbSAndroid Build Coastguard Worker  *
7*b7c941bbSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
8*b7c941bbSAndroid Build Coastguard Worker  *
9*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software distributed under the License
10*b7c941bbSAndroid Build Coastguard Worker  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11*b7c941bbSAndroid Build Coastguard Worker  * or implied. See the License for the specific language governing permissions and limitations under
12*b7c941bbSAndroid Build Coastguard Worker  * the License.
13*b7c941bbSAndroid Build Coastguard Worker  */
14*b7c941bbSAndroid Build Coastguard Worker #include "Scene.h"
15*b7c941bbSAndroid Build Coastguard Worker 
16*b7c941bbSAndroid Build Coastguard Worker #include <graphics/GLUtils.h>
17*b7c941bbSAndroid Build Coastguard Worker #include <graphics/ProgramNode.h>
18*b7c941bbSAndroid Build Coastguard Worker 
19*b7c941bbSAndroid Build Coastguard Worker #include <Trace.h>
20*b7c941bbSAndroid Build Coastguard Worker 
Scene(int width,int height)21*b7c941bbSAndroid Build Coastguard Worker Scene::Scene(int width, int height) :
22*b7c941bbSAndroid Build Coastguard Worker         mWidth(width), mHeight(height) {
23*b7c941bbSAndroid Build Coastguard Worker }
24*b7c941bbSAndroid Build Coastguard Worker 
setUpContext()25*b7c941bbSAndroid Build Coastguard Worker bool Scene::setUpContext() {
26*b7c941bbSAndroid Build Coastguard Worker     SCOPED_TRACE();
27*b7c941bbSAndroid Build Coastguard Worker     if (!setUpPrograms()) {
28*b7c941bbSAndroid Build Coastguard Worker         return false;
29*b7c941bbSAndroid Build Coastguard Worker     }
30*b7c941bbSAndroid Build Coastguard Worker     mModelMatrix = setUpModelMatrix();
31*b7c941bbSAndroid Build Coastguard Worker     if (mModelMatrix == NULL) {
32*b7c941bbSAndroid Build Coastguard Worker         return false;
33*b7c941bbSAndroid Build Coastguard Worker     }
34*b7c941bbSAndroid Build Coastguard Worker     mViewMatrix = setUpViewMatrix();
35*b7c941bbSAndroid Build Coastguard Worker     if (mViewMatrix == NULL) {
36*b7c941bbSAndroid Build Coastguard Worker         return false;
37*b7c941bbSAndroid Build Coastguard Worker     }
38*b7c941bbSAndroid Build Coastguard Worker     mProjectionMatrix = setUpProjectionMatrix(mWidth, mHeight);
39*b7c941bbSAndroid Build Coastguard Worker     if (mProjectionMatrix == NULL) {
40*b7c941bbSAndroid Build Coastguard Worker         return false;
41*b7c941bbSAndroid Build Coastguard Worker     }
42*b7c941bbSAndroid Build Coastguard Worker     return true;
43*b7c941bbSAndroid Build Coastguard Worker }
44*b7c941bbSAndroid Build Coastguard Worker 
tearDown()45*b7c941bbSAndroid Build Coastguard Worker bool Scene::tearDown() {
46*b7c941bbSAndroid Build Coastguard Worker     SCOPED_TRACE();
47*b7c941bbSAndroid Build Coastguard Worker     for (size_t i = 0; i < mTextureIds.size(); i++) {
48*b7c941bbSAndroid Build Coastguard Worker         glDeleteTextures(1, &(mTextureIds[i]));
49*b7c941bbSAndroid Build Coastguard Worker     }
50*b7c941bbSAndroid Build Coastguard Worker     for (size_t i = 0; i < mMeshes.size(); i++) {
51*b7c941bbSAndroid Build Coastguard Worker         delete mMeshes[i];
52*b7c941bbSAndroid Build Coastguard Worker     }
53*b7c941bbSAndroid Build Coastguard Worker     for (size_t i = 0; i < mSceneGraphs.size(); i++) {
54*b7c941bbSAndroid Build Coastguard Worker         delete mSceneGraphs[i];
55*b7c941bbSAndroid Build Coastguard Worker     }
56*b7c941bbSAndroid Build Coastguard Worker     delete mModelMatrix;
57*b7c941bbSAndroid Build Coastguard Worker     mModelMatrix = NULL;
58*b7c941bbSAndroid Build Coastguard Worker     delete mViewMatrix;
59*b7c941bbSAndroid Build Coastguard Worker     mViewMatrix = NULL;
60*b7c941bbSAndroid Build Coastguard Worker     delete mProjectionMatrix;
61*b7c941bbSAndroid Build Coastguard Worker     mProjectionMatrix = NULL;
62*b7c941bbSAndroid Build Coastguard Worker     return true;
63*b7c941bbSAndroid Build Coastguard Worker }
64*b7c941bbSAndroid Build Coastguard Worker 
update(int frame)65*b7c941bbSAndroid Build Coastguard Worker bool Scene::update(int frame) {
66*b7c941bbSAndroid Build Coastguard Worker     SCOPED_TRACE();
67*b7c941bbSAndroid Build Coastguard Worker     // Delete the old scene graphs.
68*b7c941bbSAndroid Build Coastguard Worker     for (size_t i = 0; i < mSceneGraphs.size(); i++) {
69*b7c941bbSAndroid Build Coastguard Worker         delete mSceneGraphs[i];
70*b7c941bbSAndroid Build Coastguard Worker     }
71*b7c941bbSAndroid Build Coastguard Worker     mSceneGraphs.clear();
72*b7c941bbSAndroid Build Coastguard Worker     return updateSceneGraphs(frame);
73*b7c941bbSAndroid Build Coastguard Worker }
74*b7c941bbSAndroid Build Coastguard Worker 
drawSceneGraph(int index)75*b7c941bbSAndroid Build Coastguard Worker void Scene::drawSceneGraph(int index) {
76*b7c941bbSAndroid Build Coastguard Worker     mModelMatrix->identity();
77*b7c941bbSAndroid Build Coastguard Worker     mSceneGraphs[index]->drawProgram(*mModelMatrix, *mViewMatrix, *mProjectionMatrix);
78*b7c941bbSAndroid Build Coastguard Worker }
79