148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/*-------------------------------------------------------------------------
248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * OpenGL Conformance Test Suite
348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * -----------------------------
448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2016 Google Inc.
648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2016 The Khronos Group Inc.
748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * you may not use this file except in compliance with the License.
1048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * You may obtain a copy of the License at
1148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
1348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Unless required by applicable law or agreed to in writing, software
1548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
1648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * See the License for the specific language governing permissions and
1848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * limitations under the License.
1948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
2048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *//*!
2148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file
2248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief
2348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *//*--------------------------------------------------------------------*/
2448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
2548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "tcuNullWSPlatform.hpp"
2648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "eglwEnums.hpp"
2748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "eglwLibrary.hpp"
2848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "egluGLContextFactory.hpp"
2948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
3048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosnamespace tcu
3148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosnamespace nullws
3348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
3548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass Window: public eglu::NativeWindow
3648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
3848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const Capability CAPABILITIES = CAPABILITY_CREATE_SURFACE_LEGACY;
3948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
4048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	Window(eglu::NativeDisplay* nativeDisplay, const eglu::WindowParams& params)
4148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: NativeWindow(CAPABILITIES)
4248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
4348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
4448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
4548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglw::EGLNativeWindowType getLegacyNative ()
4648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
4748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return DE_NULL;
4848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
4948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
5048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass WindowFactory: public eglu::NativeWindowFactory
5248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
5348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
5448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	WindowFactory()
5548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: NativeWindowFactory("nullws", "NullWS Window", Window::CAPABILITIES)
5648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
5748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
5848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglu::NativeWindow* createWindow(eglu::NativeDisplay* nativeDisplay, const eglu::WindowParams& params) const
6048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
6148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return new Window(nativeDisplay, params);
6248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
6348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
6448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass Pixmap: public eglu::NativePixmap
6648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
6748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
6848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const Capability CAPABILITIES = CAPABILITY_CREATE_SURFACE_LEGACY;
6948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	Pixmap()
7148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: NativePixmap(CAPABILITIES)
7248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
7348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
7448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglw::EGLNativePixmapType getLegacyNative ()
7648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
7748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return DE_NULL;
7848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
7948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
8048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass PixmapFactory: public eglu::NativePixmapFactory
8248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
8348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
8448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	PixmapFactory()
8548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: NativePixmapFactory("nullws", "NullWS Pixmap", Pixmap::CAPABILITIES)
8648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
8748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
8848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglu::NativePixmap* createPixmap (eglu::NativeDisplay*, int, int) const
9048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
9148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return new Pixmap();
9248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
9348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
9448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
9548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass Display: public eglu::NativeDisplay
9648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
9748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
9848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const Capability CAPABILITIES = CAPABILITY_GET_DISPLAY_LEGACY;
9948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
10048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	Display()
10148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: eglu::NativeDisplay(CAPABILITIES)
10248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
10348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
10448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
10548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglw::EGLNativeDisplayType getLegacyNative()
10648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
10748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return EGL_DEFAULT_DISPLAY;
10848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
10948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
11048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	const eglw::Library& getLibrary() const
11148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
11248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return m_library;
11348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
11448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
11548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprivate:
11648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglw::DefaultLibrary m_library;
11748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
11848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
11948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
12048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass DisplayFactory: public eglu::NativeDisplayFactory
12148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
12248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
12348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	DisplayFactory()
12448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		: eglu::NativeDisplayFactory ("nullws", "NullWS Display", Display::CAPABILITIES)
12548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
12648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		m_nativeWindowRegistry.registerFactory(new WindowFactory());
12748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		m_nativePixmapRegistry.registerFactory(new PixmapFactory());
12848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
12948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
13048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	eglu::NativeDisplay* createDisplay (const eglw::EGLAttrib* attribList = DE_NULL) const
13148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
13248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return new Display();
13348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
13448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
13548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
13648087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosPlatform::Platform ()
13748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
13848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	m_nativeDisplayFactoryRegistry.registerFactory(new DisplayFactory());
13948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry));
14048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
14148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
14248087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosPlatform::~Platform ()
14348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
14448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
14548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
14648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} // nullws
14748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} // tcu
14848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
14948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulostcu::Platform* createPlatform ()
15048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
15148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	return new tcu::nullws::Platform();
15248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
153