blob: 438dfffca292375ce0272faa47a1362e4d4578d7 [file] [log] [blame]
Nicolas Capens80d6f172016-05-13 19:30:12 -04001// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Nicolas Capens0bac2852016-05-07 06:09:58 -040015#ifndef egl_Context_hpp
16#define egl_Context_hpp
17
18#include "common/Object.hpp"
Nicolas Capens81aa97b2017-06-27 17:08:08 -040019#include "Renderer/Surface.hpp"
Nicolas Capens0bac2852016-05-07 06:09:58 -040020
21#include <EGL/egl.h>
22#include <GLES/gl.h>
23
Nicolas Capens31c07a32017-06-13 23:44:13 -040024namespace gl { class Surface; }
25
Nicolas Capens0bac2852016-05-07 06:09:58 -040026namespace egl
27{
Nicolas Capense7e70d02016-06-07 14:40:12 -040028class Display;
Nicolas Capens0bac2852016-05-07 06:09:58 -040029class Image;
30
Nicolas Capens9ed48ba2017-05-11 11:25:00 -040031class [[clang::lto_visibility_public]] Context : public gl::Object
Nicolas Capens0bac2852016-05-07 06:09:58 -040032{
33public:
Nicolas Capens31c07a32017-06-13 23:44:13 -040034 virtual void makeCurrent(gl::Surface *surface) = 0;
35 virtual void bindTexImage(gl::Surface *surface) = 0;
Nicolas Capens0bac2852016-05-07 06:09:58 -040036 virtual EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel) = 0;
37 virtual Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel) = 0;
Nicolas Capensf6a377b2017-05-19 09:31:35 -040038 virtual EGLint getClientVersion() const = 0;
39 virtual EGLint getConfigID() const = 0;
Nicolas Capens0bac2852016-05-07 06:09:58 -040040 virtual void finish() = 0;
Nicolas Capens81aa97b2017-06-27 17:08:08 -040041 virtual void blit(sw::Surface *source, const sw::SliceRect &sRect, sw::Surface *dest, const sw::SliceRect &dRect) = 0;
Nicolas Capens0bac2852016-05-07 06:09:58 -040042
Nicolas Capens8aca1df2017-06-15 14:15:30 -070043 Display *getDisplay() const { return display; }
44
Nicolas Capens0bac2852016-05-07 06:09:58 -040045protected:
Nicolas Capens31c07a32017-06-13 23:44:13 -040046 Context(egl::Display *display) : display(display) {}
Ben Clayton2a582382019-04-24 12:11:36 +010047 virtual ~Context() {}
Nicolas Capense7e70d02016-06-07 14:40:12 -040048
49 egl::Display *const display;
Nicolas Capens0bac2852016-05-07 06:09:58 -040050};
51}
52
53#endif // egl_Context_hpp