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

Side by Side Diff: gpu/command_buffer/service/display.cc

Issue 10106015: Allow textures to be moved from one GL context group to another. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months 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
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/service/display.h"
6 #include "gpu/command_buffer/service/texture_definition.h"
7
8 namespace gpu {
9 namespace gles2 {
10
11 Display::Display() {
12 }
13
14 Display::~Display() {
15 }
16
17 TextureDefinition* Display::ConsumeTexture(GLenum target,
18 const MailboxName& name) {
19 TextureDefinitionMap::iterator it =
20 textures_.find(TargetName(target, name));
21 if (it == textures_.end())
22 return NULL;
23
24 TextureDefinition* definition = it->second.definition.release();
25 textures_.erase(it);
26
27 return definition;
28 }
29
30 void Display::ProduceTexture(GLenum target,
31 const MailboxName& name,
32 TextureDefinition* definition,
33 TextureManager* owner) {
34 TextureDefinitionMap::iterator it =
35 textures_.find(TargetName(target, name));
36 if (it != textures_.end()) {
37 GLuint service_id = it->second.definition->ReleaseServiceId();
38 glDeleteTextures(1, &service_id);
39 it->second = OwnedTextureDefinition(definition, owner);
40 } else {
41 textures_.insert(std::make_pair(
42 TargetName(target, name),
43 OwnedTextureDefinition(definition, owner)));
44 }
45 }
46
47 void Display::DestroyOwnedTextures(TextureManager* owner, bool have_context) {
48 TextureDefinitionMap::iterator it = textures_.begin();
49 while (it != textures_.end()) {
50 if (it->second.owner == owner) {
51 GLuint service_id = it->second.definition->ReleaseServiceId();
52 if (have_context)
53 glDeleteTextures(1, &service_id);
54 it = textures_.erase(it);
55 } else {
56 ++it;
57 }
58 }
59 }
60
61 Display::TargetName::TargetName(GLenum target, const MailboxName& name)
62 : target(target),
63 name(name) {
64 }
65
66 size_t Display::TargetNameCompare::operator() (const TargetName& value) const {
67 size_t hash = value.target;
68 for (int i = 0; i < arraysize(value.name.components); ++i)
69 hash ^= value.name.components[i];
70 return hash;
71 }
72
73 int Display::TargetNameCompare::operator() (const TargetName& lhs,
74 const TargetName& rhs) const {
75 return memcmp(&lhs, &rhs, sizeof(lhs));
76 }
77
78 Display::OwnedTextureDefinition::OwnedTextureDefinition(
79 TextureDefinition* definition,
80 TextureManager* owner)
81 : definition(definition),
82 owner(owner) {
83 }
84
85 } // namespace gles2
86 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698