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 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 5 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
6 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 6 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
7 | 7 |
8 #include <GLES2/gl2.h> | 8 #include <GLES2/gl2.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 #include <queue> | 11 #include <queue> |
12 #include <set> | 12 #include <set> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "../common/compiler_specific.h" | 16 #include "../common/compiler_specific.h" |
17 #include "../common/debug_marker_manager.h" | 17 #include "../common/debug_marker_manager.h" |
18 #include "../common/gles2_cmd_utils.h" | 18 #include "../common/gles2_cmd_utils.h" |
19 #include "../common/scoped_ptr.h" | 19 #include "../common/scoped_ptr.h" |
20 #include "../client/ref_counted.h" | 20 #include "../client/ref_counted.h" |
| 21 #include "../client/client_context_state.h" |
21 #include "../client/gles2_cmd_helper.h" | 22 #include "../client/gles2_cmd_helper.h" |
22 #include "../client/gles2_interface.h" | 23 #include "../client/gles2_interface.h" |
23 #include "../client/query_tracker.h" | 24 #include "../client/query_tracker.h" |
24 #include "../client/ring_buffer.h" | 25 #include "../client/ring_buffer.h" |
25 #include "../client/share_group.h" | 26 #include "../client/share_group.h" |
26 #include "gles2_impl_export.h" | 27 #include "gles2_impl_export.h" |
27 | 28 |
28 #if !defined(NDEBUG) && !defined(__native_client__) && !defined(GLES2_CONFORMANC
E_TESTS) // NOLINT | 29 #if !defined(NDEBUG) && !defined(__native_client__) && !defined(GLES2_CONFORMANC
E_TESTS) // NOLINT |
29 #if defined(GLES2_INLINE_OPTIMIZATION) | 30 #if defined(GLES2_INLINE_OPTIMIZATION) |
30 // TODO(gman): Replace with macros that work with inline optmization. | 31 // TODO(gman): Replace with macros that work with inline optmization. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 // GLES2CmdHelper but that entails changing your code to use and deal with | 102 // GLES2CmdHelper but that entails changing your code to use and deal with |
102 // shared memory and synchronization issues. | 103 // shared memory and synchronization issues. |
103 class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface { | 104 class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface { |
104 public: | 105 public: |
105 class ErrorMessageCallback { | 106 class ErrorMessageCallback { |
106 public: | 107 public: |
107 virtual ~ErrorMessageCallback() { } | 108 virtual ~ErrorMessageCallback() { } |
108 virtual void OnErrorMessage(const char* msg, int id) = 0; | 109 virtual void OnErrorMessage(const char* msg, int id) = 0; |
109 }; | 110 }; |
110 | 111 |
111 // Stores client side cached GL state. | 112 // Stores GL state that never changes. |
112 struct GLCachedState { | 113 struct GLStaticState { |
113 struct GLES2_IMPL_EXPORT IntState { | 114 struct GLES2_IMPL_EXPORT IntState { |
114 IntState(); | 115 IntState(); |
115 GLint max_combined_texture_image_units; | 116 GLint max_combined_texture_image_units; |
116 GLint max_cube_map_texture_size; | 117 GLint max_cube_map_texture_size; |
117 GLint max_fragment_uniform_vectors; | 118 GLint max_fragment_uniform_vectors; |
118 GLint max_renderbuffer_size; | 119 GLint max_renderbuffer_size; |
119 GLint max_texture_image_units; | 120 GLint max_texture_image_units; |
120 GLint max_texture_size; | 121 GLint max_texture_size; |
121 GLint max_varying_vectors; | 122 GLint max_varying_vectors; |
122 GLint max_vertex_attribs; | 123 GLint max_vertex_attribs; |
123 GLint max_vertex_texture_image_units; | 124 GLint max_vertex_texture_image_units; |
124 GLint max_vertex_uniform_vectors; | 125 GLint max_vertex_uniform_vectors; |
125 GLint num_compressed_texture_formats; | 126 GLint num_compressed_texture_formats; |
126 GLint num_shader_binary_formats; | 127 GLint num_shader_binary_formats; |
127 }; | 128 }; |
128 struct EnableState { | |
129 EnableState() | |
130 : blend(false), | |
131 cull_face(false), | |
132 depth_test(false), | |
133 dither(false), | |
134 polygon_offset_fill(false), | |
135 sample_alpha_to_coverage(false), | |
136 sample_coverage(false), | |
137 scissor_test(false), | |
138 stencil_test(false) { | |
139 } | |
140 | |
141 bool blend; | |
142 bool cull_face; | |
143 bool depth_test; | |
144 bool dither; | |
145 bool polygon_offset_fill; | |
146 bool sample_alpha_to_coverage; | |
147 bool sample_coverage; | |
148 bool scissor_test; | |
149 bool stencil_test; | |
150 }; | |
151 | |
152 IntState int_state; | 129 IntState int_state; |
153 EnableState enable_state; | |
154 }; | 130 }; |
155 | 131 |
156 // The maxiumum result size from simple GL get commands. | 132 // The maxiumum result size from simple GL get commands. |
157 static const size_t kMaxSizeOfSimpleResult = 16 * sizeof(uint32); // NOLINT. | 133 static const size_t kMaxSizeOfSimpleResult = 16 * sizeof(uint32); // NOLINT. |
158 | 134 |
159 // used for testing only. If more things are reseved add them here. | 135 // used for testing only. If more things are reseved add them here. |
160 static const unsigned int kStartingOffset = kMaxSizeOfSimpleResult; | 136 static const unsigned int kStartingOffset = kMaxSizeOfSimpleResult; |
161 | 137 |
162 // Size in bytes to issue async flush for transfer buffer. | 138 // Size in bytes to issue async flush for transfer buffer. |
163 static const unsigned int kSizeToFlush = 256 * 1024; | 139 static const unsigned int kSizeToFlush = 256 * 1024; |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 // Sets the contents of a bucket as a string. | 375 // Sets the contents of a bucket as a string. |
400 void SetBucketAsString(uint32 bucket_id, const std::string& str); | 376 void SetBucketAsString(uint32 bucket_id, const std::string& str); |
401 | 377 |
402 // Returns true if id is reserved. | 378 // Returns true if id is reserved. |
403 bool IsBufferReservedId(GLuint id); | 379 bool IsBufferReservedId(GLuint id); |
404 bool IsFramebufferReservedId(GLuint id) { return false; } | 380 bool IsFramebufferReservedId(GLuint id) { return false; } |
405 bool IsRenderbufferReservedId(GLuint id) { return false; } | 381 bool IsRenderbufferReservedId(GLuint id) { return false; } |
406 bool IsTextureReservedId(GLuint id) { return false; } | 382 bool IsTextureReservedId(GLuint id) { return false; } |
407 bool IsVertexArrayReservedId(GLuint id) { return false; } | 383 bool IsVertexArrayReservedId(GLuint id) { return false; } |
408 | 384 |
409 void BindBufferHelper(GLenum target, GLuint texture); | 385 bool BindBufferHelper(GLenum target, GLuint texture); |
410 void BindFramebufferHelper(GLenum target, GLuint texture); | 386 bool BindFramebufferHelper(GLenum target, GLuint texture); |
411 void BindRenderbufferHelper(GLenum target, GLuint texture); | 387 bool BindRenderbufferHelper(GLenum target, GLuint texture); |
412 void BindTextureHelper(GLenum target, GLuint texture); | 388 bool BindTextureHelper(GLenum target, GLuint texture); |
413 void BindVertexArrayHelper(GLuint array); | 389 bool BindVertexArrayHelper(GLuint array); |
414 | 390 |
415 void DeleteBuffersHelper(GLsizei n, const GLuint* buffers); | 391 void DeleteBuffersHelper(GLsizei n, const GLuint* buffers); |
416 void DeleteFramebuffersHelper(GLsizei n, const GLuint* framebuffers); | 392 void DeleteFramebuffersHelper(GLsizei n, const GLuint* framebuffers); |
417 void DeleteRenderbuffersHelper(GLsizei n, const GLuint* renderbuffers); | 393 void DeleteRenderbuffersHelper(GLsizei n, const GLuint* renderbuffers); |
418 void DeleteTexturesHelper(GLsizei n, const GLuint* textures); | 394 void DeleteTexturesHelper(GLsizei n, const GLuint* textures); |
419 bool DeleteProgramHelper(GLuint program); | 395 bool DeleteProgramHelper(GLuint program); |
420 bool DeleteShaderHelper(GLuint shader); | 396 bool DeleteShaderHelper(GLuint shader); |
421 void DeleteQueriesEXTHelper(GLsizei n, const GLuint* textures); | 397 void DeleteQueriesEXTHelper(GLsizei n, const GLuint* textures); |
422 void DeleteVertexArraysOESHelper(GLsizei n, const GLuint* arrays); | 398 void DeleteVertexArraysOESHelper(GLsizei n, const GLuint* arrays); |
423 | 399 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 TransferBufferInterface* transfer_buffer_; | 466 TransferBufferInterface* transfer_buffer_; |
491 std::string last_error_; | 467 std::string last_error_; |
492 DebugMarkerManager debug_marker_manager_; | 468 DebugMarkerManager debug_marker_manager_; |
493 std::string this_in_hex_; | 469 std::string this_in_hex_; |
494 | 470 |
495 std::queue<int32> swap_buffers_tokens_; | 471 std::queue<int32> swap_buffers_tokens_; |
496 std::queue<int32> rate_limit_tokens_; | 472 std::queue<int32> rate_limit_tokens_; |
497 | 473 |
498 ExtensionStatus angle_pack_reverse_row_order_status; | 474 ExtensionStatus angle_pack_reverse_row_order_status; |
499 | 475 |
500 GLCachedState gl_state_; | 476 GLStaticState static_state_; |
| 477 ClientContextState state_; |
501 | 478 |
502 // pack alignment as last set by glPixelStorei | 479 // pack alignment as last set by glPixelStorei |
503 GLint pack_alignment_; | 480 GLint pack_alignment_; |
504 | 481 |
505 // unpack alignment as last set by glPixelStorei | 482 // unpack alignment as last set by glPixelStorei |
506 GLint unpack_alignment_; | 483 GLint unpack_alignment_; |
507 | 484 |
508 // unpack yflip as last set by glPixelstorei | 485 // unpack yflip as last set by glPixelstorei |
509 bool unpack_flip_y_; | 486 bool unpack_flip_y_; |
510 | 487 |
(...skipping 10 matching lines...) Expand all Loading... |
521 bool pack_reverse_row_order_; | 498 bool pack_reverse_row_order_; |
522 | 499 |
523 scoped_array<TextureUnit> texture_units_; | 500 scoped_array<TextureUnit> texture_units_; |
524 | 501 |
525 // 0 to gl_state_.max_combined_texture_image_units. | 502 // 0 to gl_state_.max_combined_texture_image_units. |
526 GLuint active_texture_unit_; | 503 GLuint active_texture_unit_; |
527 | 504 |
528 GLuint bound_framebuffer_; | 505 GLuint bound_framebuffer_; |
529 GLuint bound_renderbuffer_; | 506 GLuint bound_renderbuffer_; |
530 | 507 |
| 508 // The program in use by glUseProgram |
| 509 GLuint current_program_; |
| 510 |
531 // The currently bound array buffer. | 511 // The currently bound array buffer. |
532 GLuint bound_array_buffer_id_; | 512 GLuint bound_array_buffer_id_; |
533 | 513 |
534 // The currently bound element array buffer. | 514 // The currently bound element array buffer. |
535 GLuint bound_element_array_buffer_id_; | 515 GLuint bound_element_array_buffer_id_; |
536 | 516 |
537 // GL names for the buffers used to emulate client side buffers. | 517 // GL names for the buffers used to emulate client side buffers. |
538 GLuint client_side_array_id_; | 518 GLuint client_side_array_id_; |
539 GLuint client_side_element_array_id_; | 519 GLuint client_side_element_array_id_; |
540 | 520 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 | 593 |
614 inline bool GLES2Implementation::GetTexParameterivHelper( | 594 inline bool GLES2Implementation::GetTexParameterivHelper( |
615 GLenum /* target */, GLenum /* pname */, GLint* /* params */) { | 595 GLenum /* target */, GLenum /* pname */, GLint* /* params */) { |
616 return false; | 596 return false; |
617 } | 597 } |
618 | 598 |
619 } // namespace gles2 | 599 } // namespace gles2 |
620 } // namespace gpu | 600 } // namespace gpu |
621 | 601 |
622 #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 602 #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
OLD | NEW |