mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
106 lines
2.6 KiB
C++
106 lines
2.6 KiB
C++
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
|
|
#define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
|
|
|
|
#include <vector>
|
|
|
|
#include "base/memory/ref_counted.h"
|
|
#include "gpu/command_buffer/service/gl_utils.h"
|
|
|
|
namespace gfx {
|
|
class GLImage;
|
|
}
|
|
|
|
namespace gpu {
|
|
namespace gles2 {
|
|
|
|
class Texture;
|
|
|
|
class NativeImageBuffer : public base::RefCountedThreadSafe<NativeImageBuffer> {
|
|
public:
|
|
static scoped_refptr<NativeImageBuffer> Create(GLuint texture_id);
|
|
|
|
virtual void AddClient(gfx::GLImage* client) = 0;
|
|
virtual void RemoveClient(gfx::GLImage* client) = 0;
|
|
virtual bool IsClient(gfx::GLImage* client) = 0;
|
|
virtual void BindToTexture(GLenum target) = 0;
|
|
|
|
protected:
|
|
friend class base::RefCountedThreadSafe<NativeImageBuffer>;
|
|
NativeImageBuffer() {}
|
|
virtual ~NativeImageBuffer() {}
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(NativeImageBuffer);
|
|
};
|
|
|
|
// An immutable description that can be used to create a texture that shares
|
|
// the underlying image buffer(s).
|
|
class TextureDefinition {
|
|
public:
|
|
TextureDefinition();
|
|
TextureDefinition(Texture* texture,
|
|
unsigned int version,
|
|
const scoped_refptr<NativeImageBuffer>& image);
|
|
virtual ~TextureDefinition();
|
|
|
|
Texture* CreateTexture() const;
|
|
void UpdateTexture(Texture* texture) const;
|
|
|
|
unsigned int version() const { return version_; }
|
|
bool IsOlderThan(unsigned int version) const {
|
|
return (version - version_) < 0x80000000;
|
|
}
|
|
bool Matches(const Texture* texture) const;
|
|
|
|
scoped_refptr<NativeImageBuffer> image() const { return image_buffer_; }
|
|
|
|
private:
|
|
bool SafeToRenderFrom() const;
|
|
|
|
struct LevelInfo {
|
|
LevelInfo();
|
|
LevelInfo(GLenum target,
|
|
GLenum internal_format,
|
|
GLsizei width,
|
|
GLsizei height,
|
|
GLsizei depth,
|
|
GLint border,
|
|
GLenum format,
|
|
GLenum type,
|
|
bool cleared);
|
|
~LevelInfo();
|
|
|
|
GLenum target;
|
|
GLenum internal_format;
|
|
GLsizei width;
|
|
GLsizei height;
|
|
GLsizei depth;
|
|
GLint border;
|
|
GLenum format;
|
|
GLenum type;
|
|
bool cleared;
|
|
};
|
|
|
|
unsigned int version_;
|
|
GLenum target_;
|
|
scoped_refptr<NativeImageBuffer> image_buffer_;
|
|
GLenum min_filter_;
|
|
GLenum mag_filter_;
|
|
GLenum wrap_s_;
|
|
GLenum wrap_t_;
|
|
GLenum usage_;
|
|
bool immutable_;
|
|
bool defined_;
|
|
|
|
// Only support textures with one face and one level.
|
|
LevelInfo level_info_;
|
|
};
|
|
|
|
} // namespage gles2
|
|
} // namespace gpu
|
|
|
|
#endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
|