| // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
 | // | 
 | // 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. | 
 |  | 
 | // main.h: Management of thread-local data. | 
 |  | 
 | #ifndef LIBEGL_MAIN_H_ | 
 | #define LIBEGL_MAIN_H_ | 
 |  | 
 | #include "libGLES_CM/libGLES_CM.hpp" | 
 | #include "libGLESv2/libGLESv2.hpp" | 
 |  | 
 | #include <EGL/egl.h> | 
 | #include <EGL/eglext.h> | 
 |  | 
 | namespace egl | 
 | { | 
 | 	class Display; | 
 | 	class Context; | 
 | 	class Surface; | 
 | 	class Config; | 
 | 	class Image; | 
 |  | 
 | 	struct Current | 
 | 	{ | 
 | 		EGLint error; | 
 | 		EGLenum API; | 
 | 		Context *context; | 
 | 		Surface *drawSurface; | 
 | 		Surface *readSurface; | 
 | 	}; | 
 |  | 
 | 	void detachThread(); | 
 |  | 
 | 	void setCurrentError(EGLint error); | 
 | 	EGLint getCurrentError(); | 
 |  | 
 | 	void setCurrentAPI(EGLenum API); | 
 | 	EGLenum getCurrentAPI(); | 
 |  | 
 | 	void setCurrentContext(Context *ctx); | 
 | 	Context *getCurrentContext(); | 
 |  | 
 | 	void setCurrentDrawSurface(Surface *surface); | 
 | 	Surface *getCurrentDrawSurface(); | 
 |  | 
 | 	void setCurrentReadSurface(Surface *surface); | 
 | 	Surface *getCurrentReadSurface(); | 
 |  | 
 | 	void error(EGLint errorCode); | 
 |  | 
 | 	template<class T> | 
 | 	const T &error(EGLint errorCode, const T &returnValue) | 
 | 	{ | 
 | 		egl::error(errorCode); | 
 |  | 
 | 		return returnValue; | 
 | 	} | 
 |  | 
 | 	template<class T> | 
 | 	const T &success(const T &returnValue) | 
 | 	{ | 
 | 		egl::setCurrentError(EGL_SUCCESS); | 
 |  | 
 | 		return returnValue; | 
 | 	} | 
 | } | 
 |  | 
 | extern LibGLES_CM libGLES_CM; | 
 | extern LibGLESv2 libGLESv2; | 
 |  | 
 | #endif  // LIBEGL_MAIN_H_ |