132 lines
3.8 KiB
C++
132 lines
3.8 KiB
C++
#ifndef _TCUIOSPLATFORM_HPP
|
|
#define _TCUIOSPLATFORM_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program Tester Core
|
|
* ----------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief iOS Platform implementation.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
#include "tcuPlatform.hpp"
|
|
#include "gluPlatform.hpp"
|
|
#include "gluRenderContext.hpp"
|
|
#include "gluContextFactory.hpp"
|
|
#include "gluObjectWrapper.hpp"
|
|
#include "tcuRenderTarget.hpp"
|
|
#include "glwFunctions.hpp"
|
|
#include "deMutex.hpp"
|
|
|
|
#import "tcuEAGLView.h"
|
|
|
|
#import <OpenGLES/EAGL.h>
|
|
|
|
namespace tcu
|
|
{
|
|
namespace ios
|
|
{
|
|
|
|
class ScreenManager
|
|
{
|
|
public:
|
|
ScreenManager (tcuEAGLView* view);
|
|
~ScreenManager (void);
|
|
|
|
CAEAGLLayer* acquireScreen (void);
|
|
void releaseScreen (CAEAGLLayer* layer);
|
|
|
|
private:
|
|
ScreenManager (const ScreenManager&);
|
|
ScreenManager& operator= (const ScreenManager&);
|
|
|
|
tcuEAGLView* m_view;
|
|
de::Mutex m_viewLock;
|
|
};
|
|
|
|
class ContextFactory : public glu::ContextFactory
|
|
{
|
|
public:
|
|
ContextFactory (ScreenManager* screenManager);
|
|
~ContextFactory (void);
|
|
|
|
glu::RenderContext* createContext (const glu::RenderConfig& config, const tcu::CommandLine& cmdLine) const;
|
|
|
|
private:
|
|
ScreenManager* const m_screenManager;
|
|
};
|
|
|
|
class Platform : public tcu::Platform, private glu::Platform
|
|
{
|
|
public:
|
|
Platform (ScreenManager* screenManager);
|
|
virtual ~Platform (void);
|
|
|
|
const glu::Platform& getGLPlatform (void) const { return static_cast<const glu::Platform&>(*this); }
|
|
};
|
|
|
|
//! EAGLContext-backed rendering context. Doesn't have default framebuffer.
|
|
class RawContext : public glu::RenderContext
|
|
{
|
|
public:
|
|
RawContext (glu::ContextType type);
|
|
virtual ~RawContext (void);
|
|
|
|
virtual glu::ContextType getType (void) const { return m_type; }
|
|
virtual const glw::Functions& getFunctions (void) const { return m_functions; }
|
|
virtual const RenderTarget& getRenderTarget (void) const { return m_emptyTarget; }
|
|
virtual deUint32 getDefaultFramebuffer (void) const { DE_FATAL("No framebuffer"); return 0; }
|
|
virtual void postIterate (void);
|
|
|
|
protected:
|
|
EAGLContext* getEAGLContext (void) const { return m_context; }
|
|
|
|
private:
|
|
glu::ContextType m_type;
|
|
EAGLContext* m_context;
|
|
glw::Functions m_functions;
|
|
tcu::RenderTarget m_emptyTarget;
|
|
};
|
|
|
|
class ScreenContext : public RawContext
|
|
{
|
|
public:
|
|
ScreenContext (ScreenManager* screenManager, const glu::RenderConfig& config);
|
|
~ScreenContext (void);
|
|
|
|
virtual const RenderTarget& getRenderTarget (void) const { return m_renderTarget; }
|
|
virtual deUint32 getDefaultFramebuffer (void) const { return *m_framebuffer; }
|
|
virtual void postIterate (void);
|
|
|
|
private:
|
|
void createFramebuffer (const glu::RenderConfig& config);
|
|
|
|
ScreenManager* m_screenManager;
|
|
CAEAGLLayer* m_layer;
|
|
|
|
glu::Framebuffer m_framebuffer;
|
|
glu::Renderbuffer m_colorBuffer;
|
|
glu::Renderbuffer m_depthStencilBuffer;
|
|
tcu::RenderTarget m_renderTarget;
|
|
};
|
|
|
|
} // ios
|
|
} // tcu
|
|
|
|
#endif // _TCUIOSPLATFORM_H
|