1// 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
15#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{
27class [[clang::lto_visibility_public]] Texture : public gl::NamedObject
28{
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
54