You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
4.2 KiB
112 lines
4.2 KiB
#ifndef _EGLUPLATFORM_HPP
|
|
#define _EGLUPLATFORM_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 EGL platform interface.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
#include "egluNativeDisplay.hpp"
|
|
#include "gluRenderContext.hpp"
|
|
|
|
namespace tcu
|
|
{
|
|
class CommandLine;
|
|
class FunctionLibrary;
|
|
}
|
|
|
|
namespace eglu
|
|
{
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief EGL platform interface
|
|
*
|
|
* EGL platform interface provides mechanism to implement platform-specific
|
|
* bits of EGL API for use in EGL tests, or OpenGL (ES) context creation.
|
|
*
|
|
* A single platform can support multiple native object types. This is
|
|
* accomplished by registering multiple object factories. Command line
|
|
* parameters (such as --deqp-egl-display-type=) are used to select
|
|
* object types.
|
|
*
|
|
* See following classes for complete description of the porting layer:
|
|
*
|
|
* * eglu::NativeDisplay, created by eglu::NativeDisplayFactory
|
|
* * eglu::NativeWindow, created by eglu::NativeWindowFactory
|
|
* * eglu::NativePixmap, created by eglu::NativePixmapFactory
|
|
*
|
|
* If you implement EGL support, you may use it to enable GL support by
|
|
* adding eglu::GLContextFactory to m_contextFactoryRegistry in your
|
|
* glu::Platform implementation.
|
|
*
|
|
* EGL platform implementation is required by EGL tests. OpenGL (ES) and
|
|
* OpenCL tests can benefit from, but do not require EGL platform
|
|
* implementation.
|
|
*//*--------------------------------------------------------------------*/
|
|
class Platform
|
|
{
|
|
public:
|
|
Platform (void);
|
|
// Code outside porting layer will never attempt to delete eglu::Platform
|
|
virtual ~Platform (void);
|
|
|
|
const NativeDisplayFactoryRegistry& getNativeDisplayFactoryRegistry (void) const { return m_nativeDisplayFactoryRegistry; }
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Get fallback GL library
|
|
*
|
|
* EGL tests use eglGetProcAddress() to load API entry points. However,
|
|
* if the platform does not support EGL_KHR_get_all_proc_addresses extension,
|
|
* core API entry points must be loaded using alternative method, namely
|
|
* this default GL function library.
|
|
*
|
|
* You may implement platform-specific way for loading GL entry points
|
|
* by implementing this method.
|
|
*
|
|
* Default implementation provides entry points for ES2 and ES3 APIs
|
|
* if binary is directly linked against GLES library.
|
|
*
|
|
* \param contextType GL context type
|
|
* \param cmdLine Reserved for future use
|
|
*//*--------------------------------------------------------------------*/
|
|
virtual tcu::FunctionLibrary* createDefaultGLFunctionLibrary (glu::ApiType apiType, const tcu::CommandLine& cmdLine) const;
|
|
|
|
protected:
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Native display factory registry
|
|
*
|
|
* Native display factory registry holds list of eglu::NativeDisplayFactory
|
|
* objects that can create eglu::NativeDisplay instances. You should
|
|
* implement eglu::NativeDisplay and eglu::NativeDisplayFactory and add
|
|
* instance of that factory implementation to this registry.
|
|
*
|
|
* --deqp-egl-display-type command line argument is used to select the
|
|
* display factory to use. If no type is given in command line, first entry
|
|
* is used.
|
|
*//*--------------------------------------------------------------------*/
|
|
NativeDisplayFactoryRegistry m_nativeDisplayFactoryRegistry;
|
|
};
|
|
|
|
} // eglu
|
|
|
|
#endif // _EGLUPLATFORM_HPP
|