mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-03 14:09:33 +03:00
There was no real reason to keep them in an angle directory and it makes the generated projects nicer. BUG=angleproject:981 Change-Id: I844e44dc5c2df51f5292cff4bdffe5e951745aae Reviewed-on: https://chromium-review.googlesource.com/266871 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Brandon Jones <bajones@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
154 lines
3.0 KiB
C++
154 lines
3.0 KiB
C++
//
|
|
// 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),
|
|
mRunning(false)
|
|
{
|
|
mEGLWindow.reset(new EGLWindow(width, height, 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, mEGLWindow->getWidth(), mEGLWindow->getHeight()))
|
|
{
|
|
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);
|
|
}
|