blob: ebeb8d189a2c99e590a166247a9181e28680fe18 [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_Texture_hpp
16#define egl_Texture_hpp
17
18#include "common/Object.hpp"
19
20namespace sw
21{
22 class Resource;
23}
24
25namespace egl
26{
Nicolas Capens6b21ba92018-07-03 15:45:43 -040027class [[clang::lto_visibility_public]] Texture : public gl::NamedObject
Nicolas Capens0bac2852016-05-07 06:09:58 -040028{
29public:
30 Texture(GLuint name) : NamedObject(name) {}
31
32 virtual void releaseTexImage() = 0;
33 virtual sw::Resource *getResource() const = 0;
34
35 virtual void sweep() = 0; // Garbage collect if no external references
36
37 void release() override
38 {
39 int refs = dereference();
40
41 if(refs > 0)
42 {
43 sweep();
44 }
45 else
46 {
47 delete this;
48 }
49 }
50};
51}
52
53#endif // egl_Texture_hpp