Index: gpu/command_buffer/service/context_state.h |
diff --git a/gpu/command_buffer/service/context_state.h b/gpu/command_buffer/service/context_state.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7b37387c91dc6c9db775202d368a654f07824502 |
--- /dev/null |
+++ b/gpu/command_buffer/service/context_state.h |
@@ -0,0 +1,199 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// This file contains the ContextState class. |
+ |
+#ifndef GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_H_ |
+#define GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_H_ |
+ |
+#include "base/logging.h" |
+#include "gpu/command_buffer/service/gl_utils.h" |
+#include "gpu/command_buffer/service/buffer_manager.h" |
+#include "gpu/command_buffer/service/framebuffer_manager.h" |
+#include "gpu/command_buffer/service/program_manager.h" |
+#include "gpu/command_buffer/service/query_manager.h" |
+#include "gpu/command_buffer/service/renderbuffer_manager.h" |
+#include "gpu/command_buffer/service/texture_manager.h" |
+#include "gpu/command_buffer/service/vertex_attrib_manager.h" |
+#include "gpu/command_buffer/service/vertex_array_manager.h" |
+ |
+namespace gpu { |
+namespace gles2 { |
+ |
+// State associated with each texture unit. |
+struct TextureUnit { |
+ TextureUnit(); |
+ ~TextureUnit(); |
+ |
+ // The last target that was bound to this texture unit. |
+ GLenum bind_target; |
+ |
+ // texture currently bound to this unit's GL_TEXTURE_2D with glBindTexture |
+ TextureManager::TextureInfo::Ref bound_texture_2d; |
+ |
+ // texture currently bound to this unit's GL_TEXTURE_CUBE_MAP with |
+ // glBindTexture |
+ TextureManager::TextureInfo::Ref bound_texture_cube_map; |
+ |
+ // texture currently bound to this unit's GL_TEXTURE_EXTERNAL_OES with |
+ // glBindTexture |
+ TextureManager::TextureInfo::Ref bound_texture_external_oes; |
+ |
+ // texture currently bound to this unit's GL_TEXTURE_RECTANGLE_ARB with |
+ // glBindTexture |
+ TextureManager::TextureInfo::Ref bound_texture_rectangle_arb; |
+ |
+ TextureManager::TextureInfo::Ref GetInfoForSamplerType(GLenum type) { |
+ DCHECK(type == GL_SAMPLER_2D || type == GL_SAMPLER_CUBE || |
+ type == GL_SAMPLER_EXTERNAL_OES || type == GL_SAMPLER_2D_RECT_ARB); |
+ switch (type) { |
+ case GL_SAMPLER_2D: |
+ return bound_texture_2d; |
+ case GL_SAMPLER_CUBE: |
+ return bound_texture_cube_map; |
+ case GL_SAMPLER_EXTERNAL_OES: |
+ return bound_texture_external_oes; |
+ case GL_SAMPLER_2D_RECT_ARB: |
+ return bound_texture_rectangle_arb; |
+ } |
+ |
+ NOTREACHED(); |
+ return NULL; |
+ } |
+ |
+ void Unbind(TextureManager::TextureInfo* texture) { |
+ if (bound_texture_2d == texture) { |
+ bound_texture_2d = NULL; |
+ } |
+ if (bound_texture_cube_map == texture) { |
+ bound_texture_cube_map = NULL; |
+ } |
+ if (bound_texture_external_oes == texture) { |
+ bound_texture_external_oes = NULL; |
+ } |
+ } |
+}; |
+ |
+ |
+struct ContextState { |
+ ContextState(); |
+ ~ContextState(); |
+ |
+ // pack alignment as last set by glPixelStorei |
+ GLint pack_alignment; |
+ |
+ // unpack alignment as last set by glPixelStorei |
+ GLint unpack_alignment; |
+ |
+ // Current active texture by 0 - n index. |
+ // In other words, if we call glActiveTexture(GL_TEXTURE2) this value would |
+ // be 2. |
+ GLuint active_texture_unit; |
+ |
+ GLfloat color_clear_red; |
+ GLfloat color_clear_green; |
+ GLfloat color_clear_blue; |
+ GLfloat color_clear_alpha; |
+ GLboolean color_mask_red; |
+ GLboolean color_mask_green; |
+ GLboolean color_mask_blue; |
+ GLboolean color_mask_alpha; |
+ |
+ GLint stencil_clear; |
+ GLuint stencil_mask_front; |
+ GLuint stencil_mask_back; |
+ GLclampf depth_clear; |
+ GLboolean depth_mask; |
+ |
+ bool enable_blend; |
+ bool enable_cull_face; |
+ bool enable_scissor_test; |
+ bool enable_depth_test; |
+ bool enable_stencil_test; |
+ |
+ // Cached values of the currently assigned viewport dimensions. |
+ GLint viewport_x; |
+ GLint viewport_y; |
+ GLsizei viewport_width; |
+ GLsizei viewport_height; |
+ GLsizei viewport_max_width; |
+ GLsizei viewport_max_height; |
+ |
+ // The currently bound array buffer. If this is 0 it is illegal to call |
+ // glVertexAttribPointer. |
+ BufferManager::BufferInfo::Ref bound_array_buffer; |
+ |
+ // Which textures are bound to texture units through glActiveTexture. |
+ scoped_array<TextureUnit> texture_units; |
+ |
+ // Class that manages vertex attribs. |
+ VertexAttribManager::Ref vertex_attrib_manager; |
+ |
+ // The program in use by glUseProgram |
+ ProgramManager::ProgramInfo::Ref current_program; |
+ |
+ // The currently bound framebuffers |
+ FramebufferManager::FramebufferInfo::Ref bound_read_framebuffer; |
+ FramebufferManager::FramebufferInfo::Ref bound_draw_framebuffer; |
+ |
+ // The currently bound renderbuffer |
+ RenderbufferManager::RenderbufferInfo::Ref bound_renderbuffer; |
+ |
+ QueryManager::Query::Ref current_query; |
+ |
+ GLenum cull_mode; |
+ GLenum front_face; |
+ GLenum depth_func; |
+ GLenum source_blend_rgb; |
+ GLenum dest_blend_rgb; |
+ GLenum source_blend_alpha; |
+ GLenum dest_blend_alpha; |
+ GLenum blend_equation_rgb; |
+ GLenum blend_equation_alpha; |
+ GLfloat blend_color_red; |
+ GLfloat blend_color_green; |
+ GLfloat blend_color_blue; |
+ GLfloat blend_color_alpha; |
+ GLenum stencil_func; |
+ GLint stencil_ref; |
+ GLenum stencil_fail; |
+ GLenum stencil_pass_depth_fail; |
+ GLenum stencil_pass_depth_pass; |
+ GLuint stencil_writemask; |
+ GLenum stencil_back_func; |
+ GLint stencil_back_ref; |
+ GLenum stencil_back_fail; |
+ GLenum stencil_back_pass_depth_fail; |
+ GLenum stencil_back_pass_depth_pass; |
+ GLuint stencil_back_writemask; |
+ bool polygon_offset_fill; |
+ GLfloat polygon_offset_factor; |
+ GLfloat polygon_offset_units; |
+ bool sample_alpha_to_coverage; |
+ bool sample_coverage; |
+ GLclampf sample_coverage_value; |
+ bool sample_coverage_invert; |
+ bool dither; |
+ |
+ GLfloat line_width; |
+ |
+ GLenum generate_mipmap_hint; |
+ GLenum fragment_shader_derivative_hint; |
+ |
+ float z_near; |
+ float z_far; |
+ |
+ GLint scissor_x; |
+ GLint scissor_y; |
+ GLsizei scissor_width; |
+ GLsizei scissor_height; |
+ |
+ bool pack_reverse_row_order; |
+}; |
+ |
+} // namespace gles2 |
+} // namespace gpu |
+ |
+#endif // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_H_ |
+ |