OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/resource_provider.h" | 5 #include "cc/resource_provider.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 | 8 |
9 #include "base/debug/alias.h" | 9 #include "base/debug/alias.h" |
10 #include "base/hash_tables.h" | 10 #include "base/hash_tables.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 ResourceMap::iterator it = m_resources.find(id); | 142 ResourceMap::iterator it = m_resources.find(id); |
143 CHECK(it != m_resources.end()); | 143 CHECK(it != m_resources.end()); |
144 Resource* resource = &it->second; | 144 Resource* resource = &it->second; |
145 return !!resource->lockForReadCount || resource->exported; | 145 return !!resource->lockForReadCount || resource->exported; |
146 } | 146 } |
147 | 147 |
148 ResourceProvider::ResourceId ResourceProvider::createResource(const gfx::Size& s
ize, GLenum format, TextureUsageHint hint) | 148 ResourceProvider::ResourceId ResourceProvider::createResource(const gfx::Size& s
ize, GLenum format, TextureUsageHint hint) |
149 { | 149 { |
150 switch (m_defaultResourceType) { | 150 switch (m_defaultResourceType) { |
151 case GLTexture: | 151 case GLTexture: |
152 return createGLTexture(size, format, hint); | 152 return createGLTexture(size, format, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
hint); |
153 case Bitmap: | 153 case Bitmap: |
154 DCHECK(format == GL_RGBA); | 154 DCHECK(format == GL_RGBA); |
155 return createBitmap(size); | 155 return createBitmap(size); |
156 } | 156 } |
157 | 157 |
158 LOG(FATAL) << "Invalid default resource type."; | 158 LOG(FATAL) << "Invalid default resource type."; |
159 return 0; | 159 return 0; |
160 } | 160 } |
161 | 161 |
162 ResourceProvider::ResourceId ResourceProvider::createGLTexture(const gfx::Size&
size, GLenum format, TextureUsageHint hint) | 162 ResourceProvider::ResourceId ResourceProvider::createManagedResource(const gfx::
Size& size, GLenum format, TextureUsageHint hint) |
| 163 { |
| 164 switch (m_defaultResourceType) { |
| 165 case GLTexture: |
| 166 return createGLTexture(size, format, GL_TEXTURE_POOL_MANAGED_CHROMIUM, h
int); |
| 167 case Bitmap: |
| 168 DCHECK(format == GL_RGBA); |
| 169 return createBitmap(size); |
| 170 } |
| 171 |
| 172 LOG(FATAL) << "Invalid default resource type."; |
| 173 return 0; |
| 174 } |
| 175 |
| 176 ResourceProvider::ResourceId ResourceProvider::createGLTexture(const gfx::Size&
size, GLenum format, GLenum texturePool, TextureUsageHint hint) |
163 { | 177 { |
164 DCHECK_LE(size.width(), m_maxTextureSize); | 178 DCHECK_LE(size.width(), m_maxTextureSize); |
165 DCHECK_LE(size.height(), m_maxTextureSize); | 179 DCHECK_LE(size.height(), m_maxTextureSize); |
166 | 180 |
167 DCHECK(m_threadChecker.CalledOnValidThread()); | 181 DCHECK(m_threadChecker.CalledOnValidThread()); |
168 unsigned textureId = 0; | 182 unsigned textureId = 0; |
169 WebGraphicsContext3D* context3d = m_outputSurface->Context3D(); | 183 WebGraphicsContext3D* context3d = m_outputSurface->Context3D(); |
170 DCHECK(context3d); | 184 DCHECK(context3d); |
171 GLC(context3d, textureId = context3d->createTexture()); | 185 GLC(context3d, textureId = context3d->createTexture()); |
172 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, textureId)); | 186 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, textureId)); |
173 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER
, GL_LINEAR)); | 187 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER
, GL_LINEAR)); |
174 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER
, GL_LINEAR)); | 188 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER
, GL_LINEAR)); |
175 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL
_CLAMP_TO_EDGE)); | 189 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL
_CLAMP_TO_EDGE)); |
176 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL
_CLAMP_TO_EDGE)); | 190 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL
_CLAMP_TO_EDGE)); |
| 191 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_POOL_CHROM
IUM, texturePool)); |
177 | 192 |
178 if (m_useTextureUsageHint && hint == TextureUsageFramebuffer) | 193 if (m_useTextureUsageHint && hint == TextureUsageFramebuffer) |
179 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_USAGE_
ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE)); | 194 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_USAGE_
ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE)); |
180 if (m_useTextureStorageExt && isTextureFormatSupportedForStorage(format)) { | 195 if (m_useTextureStorageExt && isTextureFormatSupportedForStorage(format)) { |
181 GLenum storageFormat = textureToStorageFormat(format); | 196 GLenum storageFormat = textureToStorageFormat(format); |
182 GLC(context3d, context3d->texStorage2DEXT(GL_TEXTURE_2D, 1, storageForma
t, size.width(), size.height())); | 197 GLC(context3d, context3d->texStorage2DEXT(GL_TEXTURE_2D, 1, storageForma
t, size.width(), size.height())); |
183 } else | 198 } else |
184 GLC(context3d, context3d->texImage2D(GL_TEXTURE_2D, 0, format, size.widt
h(), size.height(), 0, format, GL_UNSIGNED_BYTE, 0)); | 199 GLC(context3d, context3d->texImage2D(GL_TEXTURE_2D, 0, format, size.widt
h(), size.height(), 0, format, GL_UNSIGNED_BYTE, 0)); |
185 | 200 |
186 ResourceId id = m_nextId++; | 201 ResourceId id = m_nextId++; |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 return false; | 950 return false; |
936 } | 951 } |
937 | 952 |
938 resource->pendingSetPixels = false; | 953 resource->pendingSetPixels = false; |
939 unlockForWrite(id); | 954 unlockForWrite(id); |
940 | 955 |
941 return true; | 956 return true; |
942 } | 957 } |
943 | 958 |
944 } // namespace cc | 959 } // namespace cc |
OLD | NEW |