| Index: gpu/command_buffer/service/texture_manager.h
|
| diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
|
| index af6de35f55dacde18c4f492c025103aed749cd81..b756e7ac65c5768ce9c1fcdb904cc7827017d729 100644
|
| --- a/gpu/command_buffer/service/texture_manager.h
|
| +++ b/gpu/command_buffer/service/texture_manager.h
|
| @@ -12,7 +12,6 @@
|
| #include "base/hash_tables.h"
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "gpu/command_buffer/service/feature_info.h"
|
| #include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| #include "gpu/gpu_export.h"
|
| @@ -24,352 +23,352 @@ namespace gles2 {
|
|
|
| class GLES2Decoder;
|
| class Display;
|
| +class FeatureInfo;
|
| class TextureDefinition;
|
| +class TextureManager;
|
|
|
| -// This class keeps track of the textures and their sizes so we can do NPOT and
|
| -// texture complete checking.
|
| -//
|
| -// NOTE: To support shared resources an instance of this class will need to be
|
| -// shared by multiple GLES2Decoders.
|
| -class GPU_EXPORT TextureManager {
|
| +// Info about Textures currently in the system.
|
| +class GPU_EXPORT Texture : public base::RefCounted<Texture> {
|
| public:
|
| - enum DefaultAndBlackTextures {
|
| - kTexture2D,
|
| - kCubeMap,
|
| - kExternalOES,
|
| - kRectangleARB,
|
| - kNumDefaultTextures
|
| - };
|
| + Texture(TextureManager* manager, GLuint service_id);
|
|
|
| - // Info about Textures currently in the system.
|
| - class GPU_EXPORT TextureInfo : public base::RefCounted<TextureInfo> {
|
| - public:
|
| - typedef scoped_refptr<TextureInfo> Ref;
|
| + GLenum min_filter() const {
|
| + return min_filter_;
|
| + }
|
|
|
| - TextureInfo(TextureManager* manager, GLuint service_id);
|
| + GLenum mag_filter() const {
|
| + return mag_filter_;
|
| + }
|
|
|
| - GLenum min_filter() const {
|
| - return min_filter_;
|
| - }
|
| + GLenum wrap_s() const {
|
| + return wrap_s_;
|
| + }
|
|
|
| - GLenum mag_filter() const {
|
| - return mag_filter_;
|
| - }
|
| + GLenum wrap_t() const {
|
| + return wrap_t_;
|
| + }
|
|
|
| - GLenum wrap_s() const {
|
| - return wrap_s_;
|
| - }
|
| + GLenum usage() const {
|
| + return usage_;
|
| + }
|
|
|
| - GLenum wrap_t() const {
|
| - return wrap_t_;
|
| - }
|
| + GLenum pool() const {
|
| + return pool_;
|
| + }
|
|
|
| - GLenum usage() const {
|
| - return usage_;
|
| - }
|
| + int num_uncleared_mips() const {
|
| + return num_uncleared_mips_;
|
| + }
|
|
|
| - GLenum pool() const {
|
| - return pool_;
|
| - }
|
| + uint32 estimated_size() const {
|
| + return estimated_size_;
|
| + }
|
|
|
| - int num_uncleared_mips() const {
|
| - return num_uncleared_mips_;
|
| - }
|
| + bool CanRenderTo() const {
|
| + return !stream_texture_ && target_ != GL_TEXTURE_EXTERNAL_OES;
|
| + }
|
|
|
| - uint32 estimated_size() const {
|
| - return estimated_size_;
|
| - }
|
| + // The service side OpenGL id of the texture.
|
| + GLuint service_id() const {
|
| + return service_id_;
|
| + }
|
|
|
| - bool CanRenderTo() const {
|
| - return !stream_texture_ && target_ != GL_TEXTURE_EXTERNAL_OES;
|
| - }
|
| + void SetServiceId(GLuint service_id) {
|
| + service_id_ = service_id;
|
| + }
|
|
|
| - // The service side OpenGL id of the texture.
|
| - GLuint service_id() const {
|
| - return service_id_;
|
| - }
|
| + // Returns the target this texure was first bound to or 0 if it has not
|
| + // been bound. Once a texture is bound to a specific target it can never be
|
| + // bound to a different target.
|
| + GLenum target() const {
|
| + return target_;
|
| + }
|
|
|
| - void SetServiceId(GLuint service_id) {
|
| - service_id_ = service_id;
|
| - }
|
| + // In GLES2 "texture complete" means it has all required mips for filtering
|
| + // down to a 1x1 pixel texture, they are in the correct order, they are all
|
| + // the same format.
|
| + bool texture_complete() const {
|
| + return texture_complete_;
|
| + }
|
|
|
| - // Returns the target this texure was first bound to or 0 if it has not
|
| - // been bound. Once a texture is bound to a specific target it can never be
|
| - // bound to a different target.
|
| - GLenum target() const {
|
| - return target_;
|
| - }
|
| + // In GLES2 "cube complete" means all 6 faces level 0 are defined, all the
|
| + // same format, all the same dimensions and all width = height.
|
| + bool cube_complete() const {
|
| + return cube_complete_;
|
| + }
|
|
|
| - // In GLES2 "texture complete" means it has all required mips for filtering
|
| - // down to a 1x1 pixel texture, they are in the correct order, they are all
|
| - // the same format.
|
| - bool texture_complete() const {
|
| - return texture_complete_;
|
| - }
|
| + // Whether or not this texture is a non-power-of-two texture.
|
| + bool npot() const {
|
| + return npot_;
|
| + }
|
|
|
| - // In GLES2 "cube complete" means all 6 faces level 0 are defined, all the
|
| - // same format, all the same dimensions and all width = height.
|
| - bool cube_complete() const {
|
| - return cube_complete_;
|
| - }
|
| + bool SafeToRenderFrom() const {
|
| + return cleared_;
|
| + }
|
|
|
| - // Whether or not this texture is a non-power-of-two texture.
|
| - bool npot() const {
|
| - return npot_;
|
| - }
|
| + // Get the width and height for a particular level. Returns false if level
|
| + // does not exist.
|
| + bool GetLevelSize(
|
| + GLint target, GLint level, GLsizei* width, GLsizei* height) const;
|
|
|
| - bool SafeToRenderFrom() const {
|
| - return cleared_;
|
| - }
|
| + // Get the type of a level. Returns false if level does not exist.
|
| + bool GetLevelType(
|
| + GLint target, GLint level, GLenum* type, GLenum* internal_format) const;
|
|
|
| - // Get the width and height for a particular level. Returns false if level
|
| - // does not exist.
|
| - bool GetLevelSize(
|
| - GLint target, GLint level, GLsizei* width, GLsizei* height) const;
|
| + // Get the image bound to a particular level. Returns NULL if level
|
| + // does not exist.
|
| + gfx::GLImage* GetLevelImage(GLint target, GLint level) const;
|
|
|
| - // Get the type of a level. Returns false if level does not exist.
|
| - bool GetLevelType(
|
| - GLint target, GLint level, GLenum* type, GLenum* internal_format) const;
|
| + bool IsDeleted() const {
|
| + return deleted_;
|
| + }
|
|
|
| - // Get the image bound to a particular level. Returns NULL if level
|
| - // does not exist.
|
| - gfx::GLImage* GetLevelImage(GLint target, GLint level) const;
|
| + // Returns true of the given dimensions are inside the dimensions of the
|
| + // level and if the format and type match the level.
|
| + bool ValidForTexture(
|
| + GLint target,
|
| + GLint level,
|
| + GLint xoffset,
|
| + GLint yoffset,
|
| + GLsizei width,
|
| + GLsizei height,
|
| + GLenum format,
|
| + GLenum type) const;
|
|
|
| - bool IsDeleted() const {
|
| - return deleted_;
|
| - }
|
| + bool IsValid() const {
|
| + return target() && !IsDeleted();
|
| + }
|
|
|
| - // Returns true of the given dimensions are inside the dimensions of the
|
| - // level and if the format and type match the level.
|
| - bool ValidForTexture(
|
| - GLint target,
|
| - GLint level,
|
| - GLint xoffset,
|
| - GLint yoffset,
|
| - GLsizei width,
|
| - GLsizei height,
|
| - GLenum format,
|
| - GLenum type) const;
|
| -
|
| - bool IsValid() const {
|
| - return target() && !IsDeleted();
|
| - }
|
| + void SetNotOwned() {
|
| + owned_ = false;
|
| + }
|
|
|
| - void SetNotOwned() {
|
| - owned_ = false;
|
| - }
|
| + bool IsAttachedToFramebuffer() const {
|
| + return framebuffer_attachment_count_ != 0;
|
| + }
|
|
|
| - bool IsAttachedToFramebuffer() const {
|
| - return framebuffer_attachment_count_ != 0;
|
| - }
|
| + void AttachToFramebuffer() {
|
| + ++framebuffer_attachment_count_;
|
| + }
|
|
|
| - void AttachToFramebuffer() {
|
| - ++framebuffer_attachment_count_;
|
| - }
|
| + void DetachFromFramebuffer() {
|
| + DCHECK_GT(framebuffer_attachment_count_, 0);
|
| + --framebuffer_attachment_count_;
|
| + }
|
|
|
| - void DetachFromFramebuffer() {
|
| - DCHECK_GT(framebuffer_attachment_count_, 0);
|
| - --framebuffer_attachment_count_;
|
| - }
|
| + void SetStreamTexture(bool stream_texture) {
|
| + stream_texture_ = stream_texture;
|
| + }
|
|
|
| - void SetStreamTexture(bool stream_texture) {
|
| - stream_texture_ = stream_texture;
|
| - }
|
| + int IsStreamTexture() {
|
| + return stream_texture_;
|
| + }
|
|
|
| - int IsStreamTexture() {
|
| - return stream_texture_;
|
| - }
|
| + gfx::AsyncPixelTransferState* GetAsyncTransferState() const {
|
| + return async_transfer_state_.get();
|
| + }
|
| + void SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState> state) {
|
| + async_transfer_state_ = state.Pass();
|
| + }
|
| + bool AsyncTransferIsInProgress() {
|
| + return async_transfer_state_ &&
|
| + async_transfer_state_->TransferIsInProgress();
|
| + }
|
|
|
| - gfx::AsyncPixelTransferState* GetAsyncTransferState() const {
|
| - return async_transfer_state_.get();
|
| - }
|
| - void SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState> state) {
|
| - async_transfer_state_ = state.Pass();
|
| - }
|
| - bool AsyncTransferIsInProgress() {
|
| - return async_transfer_state_ &&
|
| - async_transfer_state_->TransferIsInProgress();
|
| - }
|
| + void SetImmutable(bool immutable) {
|
| + immutable_ = immutable;
|
| + }
|
|
|
| - void SetImmutable(bool immutable) {
|
| - immutable_ = immutable;
|
| - }
|
| + bool IsImmutable() {
|
| + return immutable_;
|
| + }
|
|
|
| - bool IsImmutable() {
|
| - return immutable_;
|
| - }
|
| + // Whether a particular level/face is cleared.
|
| + bool IsLevelCleared(GLenum target, GLint level);
|
|
|
| - // Whether a particular level/face is cleared.
|
| - bool IsLevelCleared(GLenum target, GLint level);
|
| + // Whether the texture has been defined
|
| + bool IsDefined() {
|
| + return estimated_size() > 0;
|
| + }
|
|
|
| - // Whether the texture has been defined
|
| - bool IsDefined() {
|
| - return estimated_size() > 0;
|
| - }
|
| + private:
|
| + friend class TextureManager;
|
| + friend class base::RefCounted<Texture>;
|
| +
|
| + ~Texture();
|
| +
|
| + struct LevelInfo {
|
| + LevelInfo();
|
| + LevelInfo(const LevelInfo& rhs);
|
| + ~LevelInfo();
|
| +
|
| + bool cleared;
|
| + GLenum target;
|
| + GLint level;
|
| + GLenum internal_format;
|
| + GLsizei width;
|
| + GLsizei height;
|
| + GLsizei depth;
|
| + GLint border;
|
| + GLenum format;
|
| + GLenum type;
|
| + scoped_refptr<gfx::GLImage> image;
|
| + uint32 estimated_size;
|
| + };
|
|
|
| - private:
|
| - friend class TextureManager;
|
| - friend class base::RefCounted<TextureInfo>;
|
| -
|
| - ~TextureInfo();
|
| -
|
| - struct LevelInfo {
|
| - LevelInfo();
|
| - LevelInfo(const LevelInfo& rhs);
|
| - ~LevelInfo();
|
| -
|
| - bool cleared;
|
| - GLenum target;
|
| - GLint level;
|
| - GLenum internal_format;
|
| - GLsizei width;
|
| - GLsizei height;
|
| - GLsizei depth;
|
| - GLint border;
|
| - GLenum format;
|
| - GLenum type;
|
| - scoped_refptr<gfx::GLImage> image;
|
| - uint32 estimated_size;
|
| - };
|
| -
|
| - // Set the info for a particular level.
|
| - void SetLevelInfo(
|
| - const FeatureInfo* feature_info,
|
| - GLenum target,
|
| - GLint level,
|
| - GLenum internal_format,
|
| - GLsizei width,
|
| - GLsizei height,
|
| - GLsizei depth,
|
| - GLint border,
|
| - GLenum format,
|
| - GLenum type,
|
| - bool cleared);
|
| -
|
| - // Marks a particular level as cleared or uncleared.
|
| - void SetLevelCleared(GLenum target, GLint level, bool cleared);
|
| -
|
| - // Updates the cleared flag for this texture by inspecting all the mips.
|
| - void UpdateCleared();
|
| -
|
| - // Clears any renderable uncleared levels.
|
| - // Returns false if a GL error was generated.
|
| - bool ClearRenderableLevels(GLES2Decoder* decoder);
|
| -
|
| - // Clears the level.
|
| - // Returns false if a GL error was generated.
|
| - bool ClearLevel(GLES2Decoder* decoder, GLenum target, GLint level);
|
| -
|
| - // Sets a texture parameter.
|
| - // TODO(gman): Expand to SetParameteri,f,iv,fv
|
| - // Returns GL_NO_ERROR on success. Otherwise the error to generate.
|
| - GLenum SetParameter(
|
| - const FeatureInfo* feature_info, GLenum pname, GLint param);
|
| -
|
| - // Makes each of the mip levels as though they were generated.
|
| - bool MarkMipmapsGenerated(const FeatureInfo* feature_info);
|
| -
|
| - void MarkAsDeleted() {
|
| - deleted_ = true;
|
| - }
|
| + // Set the info for a particular level.
|
| + void SetLevelInfo(
|
| + const FeatureInfo* feature_info,
|
| + GLenum target,
|
| + GLint level,
|
| + GLenum internal_format,
|
| + GLsizei width,
|
| + GLsizei height,
|
| + GLsizei depth,
|
| + GLint border,
|
| + GLenum format,
|
| + GLenum type,
|
| + bool cleared);
|
|
|
| - bool NeedsMips() const {
|
| - return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR;
|
| - }
|
| + // Marks a particular level as cleared or uncleared.
|
| + void SetLevelCleared(GLenum target, GLint level, bool cleared);
|
| +
|
| + // Updates the cleared flag for this texture by inspecting all the mips.
|
| + void UpdateCleared();
|
| +
|
| + // Clears any renderable uncleared levels.
|
| + // Returns false if a GL error was generated.
|
| + bool ClearRenderableLevels(GLES2Decoder* decoder);
|
| +
|
| + // Clears the level.
|
| + // Returns false if a GL error was generated.
|
| + bool ClearLevel(GLES2Decoder* decoder, GLenum target, GLint level);
|
| +
|
| + // Sets a texture parameter.
|
| + // TODO(gman): Expand to SetParameteri,f,iv,fv
|
| + // Returns GL_NO_ERROR on success. Otherwise the error to generate.
|
| + GLenum SetParameter(
|
| + const FeatureInfo* feature_info, GLenum pname, GLint param);
|
|
|
| - // True if this texture meets all the GLES2 criteria for rendering.
|
| - // See section 3.8.2 of the GLES2 spec.
|
| - bool CanRender(const FeatureInfo* feature_info) const;
|
| + // Makes each of the mip levels as though they were generated.
|
| + bool MarkMipmapsGenerated(const FeatureInfo* feature_info);
|
|
|
| - // Returns true if mipmaps can be generated by GL.
|
| - bool CanGenerateMipmaps(const FeatureInfo* feature_info) const;
|
| + void MarkAsDeleted() {
|
| + deleted_ = true;
|
| + }
|
|
|
| - // Sets the TextureInfo's target
|
| - // Parameters:
|
| - // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP or
|
| - // GL_TEXTURE_EXTERNAL_OES or GL_TEXTURE_RECTANGLE_ARB
|
| - // max_levels: The maximum levels this type of target can have.
|
| - void SetTarget(GLenum target, GLint max_levels);
|
| + bool NeedsMips() const {
|
| + return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR;
|
| + }
|
|
|
| - // Update info about this texture.
|
| - void Update(const FeatureInfo* feature_info);
|
| + // True if this texture meets all the GLES2 criteria for rendering.
|
| + // See section 3.8.2 of the GLES2 spec.
|
| + bool CanRender(const FeatureInfo* feature_info) const;
|
|
|
| - // Set the image for a particular level.
|
| - void SetLevelImage(
|
| - const FeatureInfo* feature_info,
|
| - GLenum target,
|
| - GLint level,
|
| - gfx::GLImage* image);
|
| + // Returns true if mipmaps can be generated by GL.
|
| + bool CanGenerateMipmaps(const FeatureInfo* feature_info) const;
|
|
|
| - // Appends a signature for the given level.
|
| - void AddToSignature(
|
| - const FeatureInfo* feature_info,
|
| - GLenum target, GLint level, std::string* signature) const;
|
| + // Sets the Texture's target
|
| + // Parameters:
|
| + // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP or
|
| + // GL_TEXTURE_EXTERNAL_OES or GL_TEXTURE_RECTANGLE_ARB
|
| + // max_levels: The maximum levels this type of target can have.
|
| + void SetTarget(GLenum target, GLint max_levels);
|
|
|
| - // Info about each face and level of texture.
|
| - std::vector<std::vector<LevelInfo> > level_infos_;
|
| + // Update info about this texture.
|
| + void Update(const FeatureInfo* feature_info);
|
|
|
| - // The texture manager that manages this TextureInfo.
|
| - TextureManager* manager_;
|
| + // Set the image for a particular level.
|
| + void SetLevelImage(
|
| + const FeatureInfo* feature_info,
|
| + GLenum target,
|
| + GLint level,
|
| + gfx::GLImage* image);
|
| +
|
| + // Appends a signature for the given level.
|
| + void AddToSignature(
|
| + const FeatureInfo* feature_info,
|
| + GLenum target, GLint level, std::string* signature) const;
|
| +
|
| + // Info about each face and level of texture.
|
| + std::vector<std::vector<LevelInfo> > level_infos_;
|
|
|
| - // The id of the texure
|
| - GLuint service_id_;
|
| + // The texture manager that manages this Texture.
|
| + TextureManager* manager_;
|
|
|
| - // Whether this texture has been deleted.
|
| - bool deleted_;
|
| + // The id of the texure
|
| + GLuint service_id_;
|
|
|
| - // Whether all renderable mips of this texture have been cleared.
|
| - bool cleared_;
|
| + // Whether this texture has been deleted.
|
| + bool deleted_;
|
|
|
| - int num_uncleared_mips_;
|
| + // Whether all renderable mips of this texture have been cleared.
|
| + bool cleared_;
|
| +
|
| + int num_uncleared_mips_;
|
|
|
| - // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.
|
| - GLenum target_;
|
| + // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.
|
| + GLenum target_;
|
|
|
| - // Texture parameters.
|
| - GLenum min_filter_;
|
| - GLenum mag_filter_;
|
| - GLenum wrap_s_;
|
| - GLenum wrap_t_;
|
| - GLenum usage_;
|
| - GLenum pool_;
|
| + // Texture parameters.
|
| + GLenum min_filter_;
|
| + GLenum mag_filter_;
|
| + GLenum wrap_s_;
|
| + GLenum wrap_t_;
|
| + GLenum usage_;
|
| + GLenum pool_;
|
|
|
| - // The maximum level that has been set.
|
| - GLint max_level_set_;
|
| + // The maximum level that has been set.
|
| + GLint max_level_set_;
|
|
|
| - // Whether or not this texture is "texture complete"
|
| - bool texture_complete_;
|
| + // Whether or not this texture is "texture complete"
|
| + bool texture_complete_;
|
|
|
| - // Whether or not this texture is "cube complete"
|
| - bool cube_complete_;
|
| + // Whether or not this texture is "cube complete"
|
| + bool cube_complete_;
|
|
|
| - // Whether or not this texture is non-power-of-two
|
| - bool npot_;
|
| + // Whether or not this texture is non-power-of-two
|
| + bool npot_;
|
|
|
| - // Whether this texture has ever been bound.
|
| - bool has_been_bound_;
|
| + // Whether this texture has ever been bound.
|
| + bool has_been_bound_;
|
|
|
| - // The number of framebuffers this texture is attached to.
|
| - int framebuffer_attachment_count_;
|
| + // The number of framebuffers this texture is attached to.
|
| + int framebuffer_attachment_count_;
|
|
|
| - // Whether the associated context group owns this texture and should delete
|
| - // it.
|
| - bool owned_;
|
| + // Whether the associated context group owns this texture and should delete
|
| + // it.
|
| + bool owned_;
|
|
|
| - // Whether this is a special streaming texture.
|
| - bool stream_texture_;
|
| + // Whether this is a special streaming texture.
|
| + bool stream_texture_;
|
|
|
| - // State to facilitate async transfers on this texture.
|
| - scoped_ptr<gfx::AsyncPixelTransferState> async_transfer_state_;
|
| + // State to facilitate async transfers on this texture.
|
| + scoped_ptr<gfx::AsyncPixelTransferState> async_transfer_state_;
|
|
|
| - // Whether the texture is immutable and no further changes to the format
|
| - // or dimensions of the texture object can be made.
|
| - bool immutable_;
|
| + // Whether the texture is immutable and no further changes to the format
|
| + // or dimensions of the texture object can be made.
|
| + bool immutable_;
|
|
|
| - // Size in bytes this texture is assumed to take in memory.
|
| - uint32 estimated_size_;
|
| + // Size in bytes this texture is assumed to take in memory.
|
| + uint32 estimated_size_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(TextureInfo);
|
| + DISALLOW_COPY_AND_ASSIGN(Texture);
|
| +};
|
| +
|
| +// This class keeps track of the textures and their sizes so we can do NPOT and
|
| +// texture complete checking.
|
| +//
|
| +// NOTE: To support shared resources an instance of this class will need to be
|
| +// shared by multiple GLES2Decoders.
|
| +class GPU_EXPORT TextureManager {
|
| + public:
|
| + enum DefaultAndBlackTextures {
|
| + kTexture2D,
|
| + kCubeMap,
|
| + kExternalOES,
|
| + kRectangleARB,
|
| + kNumDefaultTextures
|
| };
|
|
|
| TextureManager(MemoryTracker* memory_tracker,
|
| @@ -418,26 +417,26 @@ class GPU_EXPORT TextureManager {
|
|
|
| // True if this texture meets all the GLES2 criteria for rendering.
|
| // See section 3.8.2 of the GLES2 spec.
|
| - bool CanRender(const TextureInfo* texture) const {
|
| + bool CanRender(const Texture* texture) const {
|
| return texture->CanRender(feature_info_);
|
| }
|
|
|
| // Returns true if mipmaps can be generated by GL.
|
| - bool CanGenerateMipmaps(const TextureInfo* texture) const {
|
| + bool CanGenerateMipmaps(const Texture* texture) const {
|
| return texture->CanGenerateMipmaps(feature_info_);
|
| }
|
|
|
| - // Sets the TextureInfo's target
|
| + // Sets the Texture's target
|
| // Parameters:
|
| // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP
|
| // max_levels: The maximum levels this type of target can have.
|
| void SetInfoTarget(
|
| - TextureInfo* info,
|
| + Texture* info,
|
| GLenum target);
|
|
|
| // Set the info for a particular level in a TexureInfo.
|
| void SetLevelInfo(
|
| - TextureInfo* info,
|
| + Texture* info,
|
| GLenum target,
|
| GLint level,
|
| GLenum internal_format,
|
| @@ -450,46 +449,46 @@ class GPU_EXPORT TextureManager {
|
| bool cleared);
|
|
|
| // Save the texture definition and leave it undefined.
|
| - TextureDefinition* Save(TextureInfo* info);
|
| + TextureDefinition* Save(Texture* info);
|
|
|
| // Redefine all the levels from the texture definition.
|
| - bool Restore(TextureInfo* info,
|
| + bool Restore(Texture* info,
|
| TextureDefinition* definition);
|
|
|
| // Sets a mip as cleared.
|
| - void SetLevelCleared(TextureInfo* info, GLenum target,
|
| + void SetLevelCleared(Texture* info, GLenum target,
|
| GLint level, bool cleared);
|
|
|
| - // Sets a texture parameter of a TextureInfo
|
| + // Sets a texture parameter of a Texture
|
| // Returns GL_NO_ERROR on success. Otherwise the error to generate.
|
| // TODO(gman): Expand to SetParameteri,f,iv,fv
|
| GLenum SetParameter(
|
| - TextureInfo* info, GLenum pname, GLint param);
|
| + Texture* info, GLenum pname, GLint param);
|
|
|
| // Makes each of the mip levels as though they were generated.
|
| // Returns false if that's not allowed for the given texture.
|
| - bool MarkMipmapsGenerated(TextureInfo* info);
|
| + bool MarkMipmapsGenerated(Texture* info);
|
|
|
| // Clears any uncleared renderable levels.
|
| - bool ClearRenderableLevels(GLES2Decoder* decoder, TextureInfo* info);
|
| + bool ClearRenderableLevels(GLES2Decoder* decoder, Texture* info);
|
|
|
| // Clear a specific level.
|
| bool ClearTextureLevel(
|
| - GLES2Decoder* decoder,TextureInfo* info, GLenum target, GLint level);
|
| + GLES2Decoder* decoder,Texture* info, GLenum target, GLint level);
|
|
|
| // Creates a new texture info.
|
| - TextureInfo* CreateTextureInfo(GLuint client_id, GLuint service_id);
|
| + Texture* CreateTexture(GLuint client_id, GLuint service_id);
|
|
|
| // Gets the texture info for the given texture.
|
| - TextureInfo* GetTextureInfo(GLuint client_id) const;
|
| + Texture* GetTexture(GLuint client_id) const;
|
|
|
| // Removes a texture info.
|
| - void RemoveTextureInfo(GLuint client_id);
|
| + void RemoveTexture(GLuint client_id);
|
|
|
| // Gets a client id for a given service id.
|
| bool GetClientId(GLuint service_id, GLuint* client_id) const;
|
|
|
| - TextureInfo* GetDefaultTextureInfo(GLenum target) {
|
| + Texture* GetDefaultTextureInfo(GLenum target) {
|
| switch (target) {
|
| case GL_TEXTURE_2D:
|
| return default_textures_[kTexture2D];
|
| @@ -540,41 +539,43 @@ class GPU_EXPORT TextureManager {
|
| }
|
|
|
| void SetLevelImage(
|
| - TextureInfo* info,
|
| + Texture* info,
|
| GLenum target,
|
| GLint level,
|
| gfx::GLImage* image);
|
|
|
| void AddToSignature(
|
| - TextureInfo* info,
|
| + Texture* info,
|
| GLenum target,
|
| GLint level,
|
| std::string* signature) const;
|
|
|
| - // Transfers added will get their TextureInfo updated at the same time
|
| + // Transfers added will get their Texture updated at the same time
|
| // the async transfer is bound to the real texture.
|
| void AddPendingAsyncPixelTransfer(
|
| - base::WeakPtr<gfx::AsyncPixelTransferState> state, TextureInfo* info);
|
| + base::WeakPtr<gfx::AsyncPixelTransferState> state, Texture* info);
|
| void BindFinishedAsyncPixelTransfers(bool* texture_dirty,
|
| bool* framebuffer_dirty);
|
|
|
| private:
|
| + friend class Texture;
|
| +
|
| // Helper for Initialize().
|
| - TextureInfo::Ref CreateDefaultAndBlackTextures(
|
| + scoped_refptr<Texture> CreateDefaultAndBlackTextures(
|
| GLenum target,
|
| GLuint* black_texture);
|
|
|
| - void StartTracking(TextureInfo* info);
|
| - void StopTracking(TextureInfo* info);
|
| + void StartTracking(Texture* info);
|
| + void StopTracking(Texture* info);
|
|
|
| MemoryTypeTracker* GetMemTracker(GLenum texture_pool);
|
| scoped_ptr<MemoryTypeTracker> memory_tracker_managed_;
|
| scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_;
|
|
|
| - FeatureInfo::Ref feature_info_;
|
| + scoped_refptr<FeatureInfo> feature_info_;
|
|
|
| // Info for each texture in the system.
|
| - typedef base::hash_map<GLuint, TextureInfo::Ref> TextureInfoMap;
|
| + typedef base::hash_map<GLuint, scoped_refptr<Texture> > TextureInfoMap;
|
| TextureInfoMap texture_infos_;
|
|
|
| GLsizei max_texture_size_;
|
| @@ -586,25 +587,25 @@ class GPU_EXPORT TextureManager {
|
| int num_unsafe_textures_;
|
| int num_uncleared_mips_;
|
|
|
| - // Counts the number of TextureInfo allocated with 'this' as its manager.
|
| - // Allows to check no TextureInfo will outlive this.
|
| + // Counts the number of Texture allocated with 'this' as its manager.
|
| + // Allows to check no Texture will outlive this.
|
| unsigned int texture_info_count_;
|
|
|
| bool have_context_;
|
|
|
| // Black (0,0,0,1) textures for when non-renderable textures are used.
|
| - // NOTE: There is no corresponding TextureInfo for these textures.
|
| + // NOTE: There is no corresponding Texture for these textures.
|
| // TextureInfos are only for textures the client side can access.
|
| GLuint black_texture_ids_[kNumDefaultTextures];
|
|
|
| // The default textures for each target (texture name = 0)
|
| - TextureInfo::Ref default_textures_[kNumDefaultTextures];
|
| + scoped_refptr<Texture> default_textures_[kNumDefaultTextures];
|
|
|
| // Async texture allocations which haven't been bound to their textures
|
| - // yet. This facilitates updating the TextureInfo at the same time the
|
| + // yet. This facilitates updating the Texture at the same time the
|
| // real texture data is bound.
|
| typedef std::pair<base::WeakPtr<gfx::AsyncPixelTransferState>,
|
| - TextureInfo*> PendingAsyncTransfer;
|
| + Texture*> PendingAsyncTransfer;
|
| typedef std::list<PendingAsyncTransfer> PendingAsyncTransferList;
|
| PendingAsyncTransferList pending_async_transfers_;
|
|
|
|
|