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

Unified Diff: gpu/command_buffer/service/context_state.h

Issue 11130005: Move per context GL state to a separate object. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
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_
+
« no previous file with comments | « no previous file | gpu/command_buffer/service/context_state.cc » ('j') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698