| 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_
|
| +
|
|
|