1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core
3e5c31af7Sopenharmony_ci * ----------------------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci *
11e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci * limitations under the License.
18e5c31af7Sopenharmony_ci *
19e5c31af7Sopenharmony_ci *//*!
20e5c31af7Sopenharmony_ci * \file
21e5c31af7Sopenharmony_ci * \brief EGL native display abstraction
22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "egluNativeDisplay.hpp"
25e5c31af7Sopenharmony_ci#include "eglwEnums.hpp"
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_cinamespace eglu
28e5c31af7Sopenharmony_ci{
29e5c31af7Sopenharmony_cinamespace
30e5c31af7Sopenharmony_ci{
31e5c31af7Sopenharmony_cistatic const NativeDisplay::Capability platformCapabilities =
32e5c31af7Sopenharmony_ci	static_cast<NativeDisplay::Capability>(NativeDisplay::CAPABILITY_GET_DISPLAY_PLATFORM | NativeDisplay::CAPABILITY_GET_DISPLAY_PLATFORM_EXT);
33e5c31af7Sopenharmony_ci}
34e5c31af7Sopenharmony_ci
35e5c31af7Sopenharmony_ciusing namespace eglw;
36e5c31af7Sopenharmony_ci
37e5c31af7Sopenharmony_ci// NativeDisplay
38e5c31af7Sopenharmony_ci
39e5c31af7Sopenharmony_ciNativeDisplay::NativeDisplay (Capability capabilities, EGLenum platformType, const char* platformExtension)
40e5c31af7Sopenharmony_ci	: m_capabilities		(capabilities)
41e5c31af7Sopenharmony_ci	, m_platformType		(platformType)
42e5c31af7Sopenharmony_ci	, m_platformExtension	(platformExtension)
43e5c31af7Sopenharmony_ci{
44e5c31af7Sopenharmony_ci	DE_ASSERT(platformType != EGL_NONE && platformExtension);
45e5c31af7Sopenharmony_ci	DE_ASSERT(capabilities & platformCapabilities);
46e5c31af7Sopenharmony_ci}
47e5c31af7Sopenharmony_ci
48e5c31af7Sopenharmony_ciNativeDisplay::NativeDisplay (Capability capabilities)
49e5c31af7Sopenharmony_ci	: m_capabilities		(capabilities)
50e5c31af7Sopenharmony_ci	, m_platformType		(EGL_NONE)
51e5c31af7Sopenharmony_ci	, m_platformExtension	("")
52e5c31af7Sopenharmony_ci{
53e5c31af7Sopenharmony_ci	DE_ASSERT(!(capabilities & platformCapabilities));
54e5c31af7Sopenharmony_ci	DE_ASSERT(capabilities & CAPABILITY_GET_DISPLAY_LEGACY);
55e5c31af7Sopenharmony_ci}
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ciNativeDisplay::~NativeDisplay (void)
58e5c31af7Sopenharmony_ci{
59e5c31af7Sopenharmony_ci}
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ciEGLNativeDisplayType NativeDisplay::getLegacyNative (void)
62e5c31af7Sopenharmony_ci{
63e5c31af7Sopenharmony_ci	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_LEGACY then
64e5c31af7Sopenharmony_ci	// this method must be implemented.
65e5c31af7Sopenharmony_ci	TCU_CHECK_INTERNAL((m_capabilities & CAPABILITY_GET_DISPLAY_LEGACY) == 0);
66e5c31af7Sopenharmony_ci	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetDisplay()");
67e5c31af7Sopenharmony_ci}
68e5c31af7Sopenharmony_ci
69e5c31af7Sopenharmony_civoid* NativeDisplay::getPlatformNative (void)
70e5c31af7Sopenharmony_ci{
71e5c31af7Sopenharmony_ci	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_PLATFORM or CAPABILITY_GET_DISPLAY_PLATFORM_EXT
72e5c31af7Sopenharmony_ci	// then this method must be implemented.
73e5c31af7Sopenharmony_ci	TCU_CHECK_INTERNAL((m_capabilities & platformCapabilities) == 0);
74e5c31af7Sopenharmony_ci	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetPlatformDisplay or eglGetPlatformDisplayEXT()");
75e5c31af7Sopenharmony_ci}
76e5c31af7Sopenharmony_ci
77e5c31af7Sopenharmony_ciconst EGLAttrib* NativeDisplay::getPlatformAttributes (void) const
78e5c31af7Sopenharmony_ci{
79e5c31af7Sopenharmony_ci	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_PLATFORM or CAPABILITY_GET_DISPLAY_PLATFORM_EXT
80e5c31af7Sopenharmony_ci	// then this method must be implemented.
81e5c31af7Sopenharmony_ci	TCU_CHECK_INTERNAL((m_capabilities & platformCapabilities) == 0);
82e5c31af7Sopenharmony_ci	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetPlatformDisplay or eglGetPlatformDisplayEXT()");
83e5c31af7Sopenharmony_ci}
84e5c31af7Sopenharmony_ci
85e5c31af7Sopenharmony_ci// NativeDisplayFactory
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ciNativeDisplayFactory::NativeDisplayFactory (const std::string& name, const std::string& description, NativeDisplay::Capability capabilities, EGLenum platformType, const char* platformExtension)
88e5c31af7Sopenharmony_ci	: FactoryBase			(name, description)
89e5c31af7Sopenharmony_ci	, m_capabilities		(capabilities)
90e5c31af7Sopenharmony_ci	, m_platformType		(platformType)
91e5c31af7Sopenharmony_ci	, m_platformExtension	(platformExtension)
92e5c31af7Sopenharmony_ci{
93e5c31af7Sopenharmony_ci	DE_ASSERT(platformType != EGL_NONE && (platformExtension || (platformCapabilities & NativeDisplay::CAPABILITY_GET_DISPLAY_PLATFORM)));
94e5c31af7Sopenharmony_ci	DE_ASSERT(capabilities & platformCapabilities);
95e5c31af7Sopenharmony_ci}
96e5c31af7Sopenharmony_ci
97e5c31af7Sopenharmony_ciNativeDisplayFactory::NativeDisplayFactory (const std::string& name, const std::string& description, NativeDisplay::Capability capabilities)
98e5c31af7Sopenharmony_ci	: FactoryBase			(name, description)
99e5c31af7Sopenharmony_ci	, m_capabilities		(capabilities)
100e5c31af7Sopenharmony_ci	, m_platformType		(EGL_NONE)
101e5c31af7Sopenharmony_ci	, m_platformExtension	("")
102e5c31af7Sopenharmony_ci{
103e5c31af7Sopenharmony_ci	DE_ASSERT(!(capabilities & platformCapabilities));
104e5c31af7Sopenharmony_ci	DE_ASSERT(capabilities & NativeDisplay::CAPABILITY_GET_DISPLAY_LEGACY);
105e5c31af7Sopenharmony_ci}
106e5c31af7Sopenharmony_ci
107e5c31af7Sopenharmony_ciNativeDisplayFactory::~NativeDisplayFactory (void)
108e5c31af7Sopenharmony_ci{
109e5c31af7Sopenharmony_ci}
110e5c31af7Sopenharmony_ci
111e5c31af7Sopenharmony_ci} // eglu
112