1c67f78d08ebbb6e06260069a040e013342939affStuart Scott/* 2c67f78d08ebbb6e06260069a040e013342939affStuart Scott * Copyright (C) 2013 The Android Open Source Project 3c67f78d08ebbb6e06260069a040e013342939affStuart Scott * 4c67f78d08ebbb6e06260069a040e013342939affStuart Scott * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5c67f78d08ebbb6e06260069a040e013342939affStuart Scott * in compliance with the License. You may obtain a copy of the License at 6c67f78d08ebbb6e06260069a040e013342939affStuart Scott * 7c67f78d08ebbb6e06260069a040e013342939affStuart Scott * http://www.apache.org/licenses/LICENSE-2.0 8c67f78d08ebbb6e06260069a040e013342939affStuart Scott * 9c67f78d08ebbb6e06260069a040e013342939affStuart Scott * Unless required by applicable law or agreed to in writing, software distributed under the License 10c67f78d08ebbb6e06260069a040e013342939affStuart Scott * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11c67f78d08ebbb6e06260069a040e013342939affStuart Scott * or implied. See the License for the specific language governing permissions and limitations under 12c67f78d08ebbb6e06260069a040e013342939affStuart Scott * the License. 13c67f78d08ebbb6e06260069a040e013342939affStuart Scott */ 14c67f78d08ebbb6e06260069a040e013342939affStuart Scott#include "ReferenceRenderer.h" 15c67f78d08ebbb6e06260069a040e013342939affStuart Scott 16c67f78d08ebbb6e06260069a040e013342939affStuart Scott#include "scene/flocking/FlockingScene.h" 1782786f4d141466c1d1c2c193268d834677529153Stuart Scott#include "scene/glowing/GlowingScene.h" 18c67f78d08ebbb6e06260069a040e013342939affStuart Scott 19c67f78d08ebbb6e06260069a040e013342939affStuart Scott#include <graphics/GLUtils.h> 20c67f78d08ebbb6e06260069a040e013342939affStuart Scott#include <graphics/ProgramNode.h> 21c67f78d08ebbb6e06260069a040e013342939affStuart Scott 22c50f5e481afebfd55ea48d36bff0ec1c2ef898deStuart Scott#include <android/log.h> 23c67f78d08ebbb6e06260069a040e013342939affStuart Scott#include <Trace.h> 24c67f78d08ebbb6e06260069a040e013342939affStuart Scott 25c67f78d08ebbb6e06260069a040e013342939affStuart ScottReferenceRenderer::ReferenceRenderer(ANativeWindow* window) : 264b4a0f6154693b1b130c204d5ae7e9c85300dab3Kalle Raita Renderer(window, false) { 27c67f78d08ebbb6e06260069a040e013342939affStuart Scott} 28c67f78d08ebbb6e06260069a040e013342939affStuart Scott 294b4a0f6154693b1b130c204d5ae7e9c85300dab3Kalle Raitabool ReferenceRenderer::setUp(int workload) { 30c67f78d08ebbb6e06260069a040e013342939affStuart Scott SCOPED_TRACE(); 31c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Reset the times. 32c67f78d08ebbb6e06260069a040e013342939affStuart Scott for (int i = 0; i < NUM_SETUP_TIMES; i++) { 33c67f78d08ebbb6e06260069a040e013342939affStuart Scott mSetUpTimes[i] = 0; 34c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 35c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Set up OpenGLES. 36c67f78d08ebbb6e06260069a040e013342939affStuart Scott double start = GLUtils::currentTimeMillis(); 374b4a0f6154693b1b130c204d5ae7e9c85300dab3Kalle Raita if (!Renderer::setUp(workload)) { 38c67f78d08ebbb6e06260069a040e013342939affStuart Scott return false; 39c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 40c67f78d08ebbb6e06260069a040e013342939affStuart Scott mSetUpTimes[0] = GLUtils::currentTimeMillis() - start; 41c67f78d08ebbb6e06260069a040e013342939affStuart Scott 42c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Create the scenes. 43c67f78d08ebbb6e06260069a040e013342939affStuart Scott mScenes[0] = new FlockingScene(mWidth, mHeight); 4482786f4d141466c1d1c2c193268d834677529153Stuart Scott mScenes[1] = new GlowingScene(mWidth, mHeight); 45c67f78d08ebbb6e06260069a040e013342939affStuart Scott // TODO add more scenes to do a comprehensive test. 46c67f78d08ebbb6e06260069a040e013342939affStuart Scott 47c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Set up the scenes. 48c67f78d08ebbb6e06260069a040e013342939affStuart Scott double times[NUM_SETUP_TIMES]; 49c67f78d08ebbb6e06260069a040e013342939affStuart Scott for (int i = 0; i < NUM_SCENES; i++) { 50c67f78d08ebbb6e06260069a040e013342939affStuart Scott times[0] = GLUtils::currentTimeMillis(); 51c67f78d08ebbb6e06260069a040e013342939affStuart Scott mScenes[i]->setUpContext(); 52c67f78d08ebbb6e06260069a040e013342939affStuart Scott times[1] = GLUtils::currentTimeMillis(); 53c67f78d08ebbb6e06260069a040e013342939affStuart Scott mScenes[i]->setUpTextures(); 54c67f78d08ebbb6e06260069a040e013342939affStuart Scott times[2] = GLUtils::currentTimeMillis(); 55c67f78d08ebbb6e06260069a040e013342939affStuart Scott mScenes[i]->setUpMeshes(); 56c67f78d08ebbb6e06260069a040e013342939affStuart Scott times[3] = GLUtils::currentTimeMillis(); 57c67f78d08ebbb6e06260069a040e013342939affStuart Scott 58c67f78d08ebbb6e06260069a040e013342939affStuart Scott for (int i = 1; i < NUM_SETUP_TIMES; i++) { 59c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Add on the set up times. 60c67f78d08ebbb6e06260069a040e013342939affStuart Scott mSetUpTimes[i] += times[i] - times[i - 1]; 61c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 62c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 63c67f78d08ebbb6e06260069a040e013342939affStuart Scott return true; 64c67f78d08ebbb6e06260069a040e013342939affStuart Scott} 65c67f78d08ebbb6e06260069a040e013342939affStuart Scott 66c67f78d08ebbb6e06260069a040e013342939affStuart Scottbool ReferenceRenderer::tearDown() { 67c67f78d08ebbb6e06260069a040e013342939affStuart Scott SCOPED_TRACE(); 68c67f78d08ebbb6e06260069a040e013342939affStuart Scott for (int i = 0; i < NUM_SCENES; i++) { 69c67f78d08ebbb6e06260069a040e013342939affStuart Scott mScenes[i]->tearDown(); 70c67f78d08ebbb6e06260069a040e013342939affStuart Scott delete mScenes[i]; 71c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 72c67f78d08ebbb6e06260069a040e013342939affStuart Scott mCurrentScene = NULL; 73c67f78d08ebbb6e06260069a040e013342939affStuart Scott if (!Renderer::tearDown()) { 74c67f78d08ebbb6e06260069a040e013342939affStuart Scott return false; 75c67f78d08ebbb6e06260069a040e013342939affStuart Scott } 76c67f78d08ebbb6e06260069a040e013342939affStuart Scott return true; 77c67f78d08ebbb6e06260069a040e013342939affStuart Scott} 78c67f78d08ebbb6e06260069a040e013342939affStuart Scott 79c67f78d08ebbb6e06260069a040e013342939affStuart Scottbool ReferenceRenderer::update(int frame) { 80c67f78d08ebbb6e06260069a040e013342939affStuart Scott SCOPED_TRACE(); 81c67f78d08ebbb6e06260069a040e013342939affStuart Scott int sceneId = frame / ReferenceRenderer::FRAMES_PER_SCENE; 82c67f78d08ebbb6e06260069a040e013342939affStuart Scott int localFrame = frame % ReferenceRenderer::FRAMES_PER_SCENE; 83c67f78d08ebbb6e06260069a040e013342939affStuart Scott mCurrentScene = mScenes[sceneId]; 84c67f78d08ebbb6e06260069a040e013342939affStuart Scott mCurrentScene->update(localFrame); 85c67f78d08ebbb6e06260069a040e013342939affStuart Scott return true; 86c67f78d08ebbb6e06260069a040e013342939affStuart Scott} 87c67f78d08ebbb6e06260069a040e013342939affStuart Scott 885e14de90a95ad16200940c67857d117bad5fbc28Stuart Scottvoid ReferenceRenderer::drawWorkload() { 89c67f78d08ebbb6e06260069a040e013342939affStuart Scott SCOPED_TRACE(); 90c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Set the background clear color to black. 91c67f78d08ebbb6e06260069a040e013342939affStuart Scott glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 92c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Use culling to remove back faces. 935e14de90a95ad16200940c67857d117bad5fbc28Stuart Scott glEnable (GL_CULL_FACE); 94c67f78d08ebbb6e06260069a040e013342939affStuart Scott // Use depth testing. 955e14de90a95ad16200940c67857d117bad5fbc28Stuart Scott glEnable (GL_DEPTH_TEST); 9682786f4d141466c1d1c2c193268d834677529153Stuart Scott 97c67f78d08ebbb6e06260069a040e013342939affStuart Scott glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 985e14de90a95ad16200940c67857d117bad5fbc28Stuart Scott if (!mCurrentScene->draw()) { 99c50f5e481afebfd55ea48d36bff0ec1c2ef898deStuart Scott __android_log_print(ANDROID_LOG_ERROR, "ReferenceRenderer", "Error when rendering scene"); 1005e14de90a95ad16200940c67857d117bad5fbc28Stuart Scott } 101c67f78d08ebbb6e06260069a040e013342939affStuart Scott} 102