13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _EGLUUNIQUE_HPP
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _EGLUUNIQUE_HPP
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief EGL unique resources
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluDefs.hpp"
273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwDefs.hpp"
283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosnamespace eglw
303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{
313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosclass Library;
323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos}
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace eglu
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosclass UniqueDisplay
383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{
393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulospublic:
403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueDisplay	(const eglw::Library& egl, eglw::EGLDisplay display);
413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							~UniqueDisplay	(void);
423c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
433c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		operator*		(void) const { return m_display; }
447bd8f7c0f982a10c6e7127ce2497ee7e208ea90ePyry Haulos	operator				bool			(void) const;
453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosprivate:
473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const eglw::Library&	m_egl;
483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		m_display;
493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	// Disabled
513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	UniqueDisplay&			operator=		(const UniqueDisplay&);
523c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueDisplay	(const UniqueDisplay&);
533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos};
543c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass UniqueSurface
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
583c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueSurface	(const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLSurface surface);
593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							~UniqueSurface	(void);
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLSurface		operator*		(void) const { return m_surface; }
627bd8f7c0f982a10c6e7127ce2497ee7e208ea90ePyry Haulos	operator				bool			(void) const;
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const eglw::Library&	m_egl;
663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		m_display;
673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLSurface		m_surface;
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Disabled
703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	UniqueSurface&			operator=		(const UniqueSurface&);
713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueSurface	(const UniqueSurface&);
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass UniqueContext
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueContext	(const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLContext context);
783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							~UniqueContext	(void);
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLContext		operator*		(void) const { return m_context; }
817bd8f7c0f982a10c6e7127ce2497ee7e208ea90ePyry Haulos	operator				bool			(void) const;
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const eglw::Library&	m_egl;
853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		m_display;
863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLContext		m_context;
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Disabled
893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	UniqueContext			operator=		(const UniqueContext&);
903c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueContext	(const UniqueContext&);
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ScopedCurrentContext
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	ScopedCurrentContext	(const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLSurface draw, eglw::EGLSurface read, eglw::EGLContext context);
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	~ScopedCurrentContext	(void);
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const eglw::Library&	m_egl;
1013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		m_display;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10453365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärviclass UniqueImage
10553365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi{
10653365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvipublic:
1073c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueImage		(const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLImage image);
10853365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi							~UniqueImage	(void);
10953365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi
1103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLImage			operator*		(void) const { return m_image; }
1117bd8f7c0f982a10c6e7127ce2497ee7e208ea90ePyry Haulos	operator				bool			(void) const;
11253365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi
11353365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärviprivate:
1143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const eglw::Library&	m_egl;
1153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay		m_display;
1163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLImage			m_image;
11753365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi
11853365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi	// Disabled
1193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	UniqueImage				operator=		(const UniqueImage&);
1203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos							UniqueImage		(const UniqueImage&);
12153365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi};
12253365959f2740e7b9ed59c51adbb73372f908a09Mika Isojärvi
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // eglu
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _EGLUUNIQUE_HPP
126