Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: cc/resource_provider.cc

Issue 11638028: Mailbox support for texture layers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL _CLAMP_TO_EDGE)); 228 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL _CLAMP_TO_EDGE));
229 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL _CLAMP_TO_EDGE)); 229 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL _CLAMP_TO_EDGE));
230 230
231 ResourceId id = m_nextId++; 231 ResourceId id = m_nextId++;
232 Resource resource(textureId, gfx::Size(), 0, GL_LINEAR); 232 Resource resource(textureId, gfx::Size(), 0, GL_LINEAR);
233 resource.external = true; 233 resource.external = true;
234 m_resources[id] = resource; 234 m_resources[id] = resource;
235 return id; 235 return id;
236 } 236 }
237 237
238 ResourceProvider::ResourceId ResourceProvider::createResourceFromTextureMailbox( const std::string& mailbox)
239 {
240 DCHECK(m_threadChecker.CalledOnValidThread());
241
242 const int8* name = reinterpret_cast<const int8*>(mailbox.c_str());
piman 2012/12/20 02:14:21 nit: .data() instead of c_str() to avoid forcing a
danakj 2012/12/20 02:16:19 how come you need reinterpret_cast to do this? wha
alexst (slow to review) 2012/12/21 14:15:21 Done.
alexst (slow to review) 2012/12/21 14:15:21 consumeTextureCHROMIUM expects signed data both, c
243 WebGraphicsContext3D* context3d = m_outputSurface->Context3D();
244 DCHECK(context3d);
245 unsigned textureId;
246 GLC(context3d, textureId = context3d->createTexture());
247 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, textureId));
248 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , GL_LINEAR));
249 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER , GL_LINEAR));
250 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL _CLAMP_TO_EDGE));
251 GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL _CLAMP_TO_EDGE));
piman 2012/12/20 02:14:21 nit: we shouldn't have to set the tex parameters,
alexst (slow to review) 2012/12/21 14:15:21 Done.
252 GLC(context3d, context3d->consumeTextureCHROMIUM(GL_TEXTURE_2D, name));
253 GLC(context3d, context3d->flush());
danakj 2012/12/20 02:16:19 how come the flush is needed?
alexst (slow to review) 2012/12/21 14:15:21 Backing texture for the mailbox is in a different
254
255 ResourceId id = m_nextId++;
256 Resource resource(textureId, gfx::Size(), 0, GL_LINEAR);
piman 2012/12/20 02:14:21 We probably want to pass all the info so that thes
alexst (slow to review) 2012/12/21 14:15:21 I only know the size but not the format from swapB
257 resource.external = true;
258 resource.mailbox.setName(name);
259 m_resources[id] = resource;
260 return id;
261 }
262
238 void ResourceProvider::deleteResource(ResourceId id) 263 void ResourceProvider::deleteResource(ResourceId id)
239 { 264 {
240 DCHECK(m_threadChecker.CalledOnValidThread()); 265 DCHECK(m_threadChecker.CalledOnValidThread());
241 ResourceMap::iterator it = m_resources.find(id); 266 ResourceMap::iterator it = m_resources.find(id);
242 CHECK(it != m_resources.end()); 267 CHECK(it != m_resources.end());
243 Resource* resource = &it->second; 268 Resource* resource = &it->second;
244 DCHECK(!resource->lockedForWrite); 269 DCHECK(!resource->lockedForWrite);
245 DCHECK(!resource->lockForReadCount); 270 DCHECK(!resource->lockForReadCount);
246 DCHECK(!resource->markedForDeletion); 271 DCHECK(!resource->markedForDeletion);
247 272
(...skipping 15 matching lines...) Expand all
263 if (resource->glUploadQueryId) { 288 if (resource->glUploadQueryId) {
264 WebGraphicsContext3D* context3d = m_outputSurface->Context3D(); 289 WebGraphicsContext3D* context3d = m_outputSurface->Context3D();
265 DCHECK(context3d); 290 DCHECK(context3d);
266 GLC(context3d, context3d->deleteQueryEXT(resource->glUploadQueryId)); 291 GLC(context3d, context3d->deleteQueryEXT(resource->glUploadQueryId));
267 } 292 }
268 if (resource->glPixelBufferId) { 293 if (resource->glPixelBufferId) {
269 WebGraphicsContext3D* context3d = m_outputSurface->Context3D(); 294 WebGraphicsContext3D* context3d = m_outputSurface->Context3D();
270 DCHECK(context3d); 295 DCHECK(context3d);
271 GLC(context3d, context3d->deleteBuffer(resource->glPixelBufferId)); 296 GLC(context3d, context3d->deleteBuffer(resource->glPixelBufferId));
272 } 297 }
298 if (!resource->mailbox.isZero()) {
piman 2012/12/20 02:14:21 This is not quite right, since we will have a mail
alexst (slow to review) 2012/12/21 14:15:21 Done.
299 WebGraphicsContext3D* context3d = m_outputSurface->Context3D();
300 DCHECK(context3d);
301 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, resource->glId));
302 GLC(context3d, context3d->produceTextureCHROMIUM(GL_TEXTURE_2D, resource ->mailbox.name));
303 GLC(context3d, context3d->deleteTexture(resource->glId));
304 }
273 if (resource->pixels) 305 if (resource->pixels)
274 delete[] resource->pixels; 306 delete[] resource->pixels;
275 if (resource->pixelBuffer) 307 if (resource->pixelBuffer)
276 delete[] resource->pixelBuffer; 308 delete[] resource->pixelBuffer;
277 309
278 m_resources.erase(it); 310 m_resources.erase(it);
279 } 311 }
280 312
281 ResourceProvider::ResourceType ResourceProvider::resourceType(ResourceId id) 313 ResourceProvider::ResourceType ResourceProvider::resourceType(ResourceId id)
282 { 314 {
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 return false; 982 return false;
951 } 983 }
952 984
953 resource->pendingSetPixels = false; 985 resource->pendingSetPixels = false;
954 unlockForWrite(id); 986 unlockForWrite(id);
955 987
956 return true; 988 return true;
957 } 989 }
958 990
959 } // namespace cc 991 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698