OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "gpu/command_buffer/service/context_state.h" | 5 #include "gpu/command_buffer/service/context_state.h" |
6 | 6 |
7 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 7 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
8 #include "gpu/command_buffer/service/buffer_manager.h" | 8 #include "gpu/command_buffer/service/buffer_manager.h" |
9 #include "gpu/command_buffer/service/error_state.h" | 9 #include "gpu/command_buffer/service/error_state.h" |
10 #include "gpu/command_buffer/service/framebuffer_manager.h" | 10 #include "gpu/command_buffer/service/framebuffer_manager.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 GLuint GetOesServiceId(const TextureUnit& unit) { | 39 GLuint GetOesServiceId(const TextureUnit& unit) { |
40 return unit.bound_texture_external_oes.get() | 40 return unit.bound_texture_external_oes.get() |
41 ? unit.bound_texture_external_oes->service_id() : 0; | 41 ? unit.bound_texture_external_oes->service_id() : 0; |
42 } | 42 } |
43 | 43 |
44 GLuint GetArbServiceId(const TextureUnit& unit) { | 44 GLuint GetArbServiceId(const TextureUnit& unit) { |
45 return unit.bound_texture_rectangle_arb.get() | 45 return unit.bound_texture_rectangle_arb.get() |
46 ? unit.bound_texture_rectangle_arb->service_id() : 0; | 46 ? unit.bound_texture_rectangle_arb->service_id() : 0; |
47 } | 47 } |
48 | 48 |
| 49 GLuint GetServiceId(const TextureUnit& unit, GLuint target) { |
| 50 switch (target) { |
| 51 case GL_TEXTURE_2D: |
| 52 return Get2dServiceId(unit); |
| 53 case GL_TEXTURE_CUBE_MAP: |
| 54 return GetCubeServiceId(unit); |
| 55 case GL_TEXTURE_RECTANGLE_ARB: |
| 56 return GetArbServiceId(unit); |
| 57 case GL_TEXTURE_EXTERNAL_OES: |
| 58 return GetOesServiceId(unit); |
| 59 default: |
| 60 NOTREACHED(); |
| 61 return 0; |
| 62 } |
| 63 } |
| 64 |
| 65 bool TargetIsSupported(const FeatureInfo* feature_info, GLuint target) { |
| 66 switch (target) { |
| 67 case GL_TEXTURE_2D: |
| 68 return true; |
| 69 case GL_TEXTURE_CUBE_MAP: |
| 70 return true; |
| 71 case GL_TEXTURE_RECTANGLE_ARB: |
| 72 return feature_info->feature_flags().arb_texture_rectangle; |
| 73 case GL_TEXTURE_EXTERNAL_OES: |
| 74 return feature_info->feature_flags().oes_egl_image_external; |
| 75 default: |
| 76 NOTREACHED(); |
| 77 return false; |
| 78 } |
| 79 } |
| 80 |
49 } // anonymous namespace. | 81 } // anonymous namespace. |
50 | 82 |
51 TextureUnit::TextureUnit() | 83 TextureUnit::TextureUnit() |
52 : bind_target(GL_TEXTURE_2D) { | 84 : bind_target(GL_TEXTURE_2D) { |
53 } | 85 } |
54 | 86 |
55 TextureUnit::~TextureUnit() { | 87 TextureUnit::~TextureUnit() { |
56 } | 88 } |
57 | 89 |
58 ContextState::ContextState(FeatureInfo* feature_info, Logger* logger) | 90 ContextState::ContextState(FeatureInfo* feature_info, Logger* logger) |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 | 172 |
141 void ContextState::RestoreAllTextureUnitBindings( | 173 void ContextState::RestoreAllTextureUnitBindings( |
142 const ContextState* prev_state) const { | 174 const ContextState* prev_state) const { |
143 // Restore Texture state. | 175 // Restore Texture state. |
144 for (size_t ii = 0; ii < texture_units.size(); ++ii) { | 176 for (size_t ii = 0; ii < texture_units.size(); ++ii) { |
145 RestoreTextureUnitBindings(ii, prev_state); | 177 RestoreTextureUnitBindings(ii, prev_state); |
146 } | 178 } |
147 RestoreActiveTexture(); | 179 RestoreActiveTexture(); |
148 } | 180 } |
149 | 181 |
| 182 void ContextState::RestoreActiveTextureUnitBinding(unsigned int target) const { |
| 183 DCHECK_LT(active_texture_unit, texture_units.size()); |
| 184 const TextureUnit& texture_unit = texture_units[active_texture_unit]; |
| 185 if (TargetIsSupported(feature_info_, target)) |
| 186 glBindTexture(target, GetServiceId(texture_unit, target)); |
| 187 } |
| 188 |
150 void ContextState::RestoreAttribute(GLuint attrib_index) const { | 189 void ContextState::RestoreAttribute(GLuint attrib_index) const { |
151 const VertexAttrib* attrib = | 190 const VertexAttrib* attrib = |
152 vertex_attrib_manager->GetVertexAttrib(attrib_index); | 191 vertex_attrib_manager->GetVertexAttrib(attrib_index); |
153 const void* ptr = reinterpret_cast<const void*>(attrib->offset()); | 192 const void* ptr = reinterpret_cast<const void*>(attrib->offset()); |
154 Buffer* buffer = attrib->buffer(); | 193 Buffer* buffer = attrib->buffer(); |
155 glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0); | 194 glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0); |
156 glVertexAttribPointer( | 195 glVertexAttribPointer( |
157 attrib_index, attrib->size(), attrib->type(), attrib->normalized(), | 196 attrib_index, attrib->size(), attrib->type(), attrib->normalized(), |
158 attrib->gl_stride(), ptr); | 197 attrib->gl_stride(), ptr); |
159 if (attrib->divisor()) | 198 if (attrib->divisor()) |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 | 242 |
204 // Include the auto-generated part of this file. We split this because it means | 243 // Include the auto-generated part of this file. We split this because it means |
205 // we can easily edit the non-auto generated parts right here in this file | 244 // we can easily edit the non-auto generated parts right here in this file |
206 // instead of having to edit some template or the code generator. | 245 // instead of having to edit some template or the code generator. |
207 #include "gpu/command_buffer/service/context_state_impl_autogen.h" | 246 #include "gpu/command_buffer/service/context_state_impl_autogen.h" |
208 | 247 |
209 } // namespace gles2 | 248 } // namespace gles2 |
210 } // namespace gpu | 249 } // namespace gpu |
211 | 250 |
212 | 251 |
OLD | NEW |