Edit

kc3-lang/angle/samples/sample_util/SampleApplication.cpp

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2015-07-22 14:10:19
    Hash : f3357ee2
    Message : EGLWindow: remove the unused width and height EGLWindow does nothing with it per se, but some code was relying on it to store it. Add width and height to ANGLETest and SampleApplication instead. Also fix a typo in PerfTestParams, widowWidth -> windowWidth. BUG=angleproject:1105 Change-Id: I26da607a2e6342864b508a50ee3cf8944608f868 Reviewed-on: https://chromium-review.googlesource.com/287379 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>

  • samples/sample_util/SampleApplication.cpp
  • //
    // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "SampleApplication.h"
    #include "EGLWindow.h"
    
    SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height,
                                         EGLint glesMajorVersion, EGLint requestedRenderer)
        : mName(name),
          mWidth(width),
          mHeight(height),
          mRunning(false)
    {
        mEGLWindow.reset(new EGLWindow(glesMajorVersion, EGLPlatformParameters(requestedRenderer)));
        mTimer.reset(CreateTimer());
        mOSWindow.reset(CreateOSWindow());
    
        mEGLWindow->setConfigRedBits(8);
        mEGLWindow->setConfigGreenBits(8);
        mEGLWindow->setConfigBlueBits(8);
        mEGLWindow->setConfigAlphaBits(8);
        mEGLWindow->setConfigDepthBits(24);
        mEGLWindow->setConfigStencilBits(8);
    
        // Disable vsync
        mEGLWindow->setSwapInterval(0);
    }
    
    SampleApplication::~SampleApplication()
    {
    }
    
    bool SampleApplication::initialize()
    {
        return true;
    }
    
    void SampleApplication::destroy()
    {
    }
    
    void SampleApplication::step(float dt, double totalTime)
    {
    }
    
    void SampleApplication::draw()
    {
    }
    
    void SampleApplication::swap()
    {
        mEGLWindow->swap();
    }
    
    OSWindow *SampleApplication::getWindow() const
    {
        return mOSWindow.get();
    }
    
    EGLConfig SampleApplication::getConfig() const
    {
        return mEGLWindow->getConfig();
    }
    
    EGLDisplay SampleApplication::getDisplay() const
    {
        return mEGLWindow->getDisplay();
    }
    
    EGLSurface SampleApplication::getSurface() const
    {
        return mEGLWindow->getSurface();
    }
    
    EGLContext SampleApplication::getContext() const
    {
        return mEGLWindow->getContext();
    }
    
    int SampleApplication::run()
    {
        if (!mOSWindow->initialize(mName, mWidth, mHeight))
        {
            return -1;
        }
    
        mOSWindow->setVisible(true);
    
        if (!mEGLWindow->initializeGL(mOSWindow.get()))
        {
            return -1;
        }
    
        mRunning = true;
        int result = 0;
    
        if (!initialize())
        {
            mRunning = false;
            result = -1;
        }
    
        mTimer->start();
        double prevTime = 0.0;
    
        while (mRunning)
        {
            double elapsedTime = mTimer->getElapsedTime();
            double deltaTime = elapsedTime - prevTime;
    
            step(static_cast<float>(deltaTime), elapsedTime);
    
            // Clear events that the application did not process from this frame
            Event event;
            while (popEvent(&event))
            {
                // If the application did not catch a close event, close now
                if (event.Type == Event::EVENT_CLOSED)
                {
                    exit();
                }
            }
    
            if (!mRunning)
            {
                break;
            }
    
            draw();
            swap();
    
            mOSWindow->messageLoop();
    
            prevTime = elapsedTime;
        }
    
        destroy();
        mEGLWindow->destroyGL();
        mOSWindow->destroy();
    
        return result;
    }
    
    void SampleApplication::exit()
    {
        mRunning = false;
    }
    
    bool SampleApplication::popEvent(Event *event)
    {
        return mOSWindow->popEvent(event);
    }