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_; |