| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_SERVICE_SHADER_MANAGER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
| 6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 class ShaderManager { | 21 class ShaderManager { |
| 22 public: | 22 public: |
| 23 // This is used to keep the source code for a shader. This is because in order | 23 // This is used to keep the source code for a shader. This is because in order |
| 24 // to emluate GLES2 the shaders will have to be re-written before passed to | 24 // to emluate GLES2 the shaders will have to be re-written before passed to |
| 25 // the underlying OpenGL. But, when the user calls glGetShaderSource they | 25 // the underlying OpenGL. But, when the user calls glGetShaderSource they |
| 26 // should get the source they passed in, not the re-written source. | 26 // should get the source they passed in, not the re-written source. |
| 27 class ShaderInfo : public base::RefCounted<ShaderInfo> { | 27 class ShaderInfo : public base::RefCounted<ShaderInfo> { |
| 28 public: | 28 public: |
| 29 typedef scoped_refptr<ShaderInfo> Ref; | 29 typedef scoped_refptr<ShaderInfo> Ref; |
| 30 | 30 |
| 31 explicit ShaderInfo(GLuint shader_id) | 31 explicit ShaderInfo(GLuint service_id) |
| 32 : shader_id_(shader_id) { | 32 : service_id_(service_id) { |
| 33 } | 33 } |
| 34 | 34 |
| 35 void Update(const std::string& source) { | 35 void Update(const std::string& source) { |
| 36 source_ = source; | 36 source_ = source; |
| 37 } | 37 } |
| 38 | 38 |
| 39 GLuint service_id() const { |
| 40 return service_id_; |
| 41 } |
| 42 |
| 39 const std::string& source() { | 43 const std::string& source() { |
| 40 return source_; | 44 return source_; |
| 41 } | 45 } |
| 42 | 46 |
| 43 bool IsDeleted() { | 47 bool IsDeleted() { |
| 44 return shader_id_ == 0; | 48 return service_id_ == 0; |
| 45 } | 49 } |
| 46 | 50 |
| 47 private: | 51 private: |
| 48 friend class base::RefCounted<ShaderInfo>; | 52 friend class base::RefCounted<ShaderInfo>; |
| 49 friend class ShaderManager; | 53 friend class ShaderManager; |
| 50 ~ShaderInfo() { } | 54 ~ShaderInfo() { } |
| 51 | 55 |
| 52 void MarkAsDeleted() { | 56 void MarkAsDeleted() { |
| 53 shader_id_ = 0; | 57 service_id_ = 0; |
| 54 } | 58 } |
| 55 | 59 |
| 56 // The shader this ShaderInfo is tracking. | 60 // The shader this ShaderInfo is tracking. |
| 57 GLuint shader_id_; | 61 GLuint service_id_; |
| 58 | 62 |
| 59 // The shader source as passed to glShaderSource. | 63 // The shader source as passed to glShaderSource. |
| 60 std::string source_; | 64 std::string source_; |
| 61 }; | 65 }; |
| 62 | 66 |
| 63 ShaderManager() { | 67 ShaderManager() { |
| 64 } | 68 } |
| 65 | 69 |
| 66 // Creates a shader info for the given shader ID. | 70 // Creates a shader info for the given shader ID. |
| 67 void CreateShaderInfo(GLuint shader_id); | 71 void CreateShaderInfo(GLuint client_id, GLuint service_id); |
| 68 | 72 |
| 69 // Gets an existing shader info for the given shader ID. Returns NULL if none | 73 // Gets an existing shader info for the given shader ID. Returns NULL if none |
| 70 // exists. | 74 // exists. |
| 71 ShaderInfo* GetShaderInfo(GLuint shader_id); | 75 ShaderInfo* GetShaderInfo(GLuint client_id); |
| 72 | 76 |
| 73 // Deletes the shader info for the given shader. | 77 // Deletes the shader info for the given shader. |
| 74 void RemoveShaderInfo(GLuint shader_id); | 78 void RemoveShaderInfo(GLuint client_id); |
| 79 |
| 80 // Gets a client id for a given service id. |
| 81 bool GetClientId(GLuint service_id, GLuint* client_id) const; |
| 75 | 82 |
| 76 private: | 83 private: |
| 77 // Info for each shader by service side shader Id. | 84 // Info for each shader by service side shader Id. |
| 78 typedef std::map<GLuint, ShaderInfo::Ref> ShaderInfoMap; | 85 typedef std::map<GLuint, ShaderInfo::Ref> ShaderInfoMap; |
| 79 ShaderInfoMap shader_infos_; | 86 ShaderInfoMap shader_infos_; |
| 80 | 87 |
| 81 DISALLOW_COPY_AND_ASSIGN(ShaderManager); | 88 DISALLOW_COPY_AND_ASSIGN(ShaderManager); |
| 82 }; | 89 }; |
| 83 | 90 |
| 84 } // namespace gles2 | 91 } // namespace gles2 |
| 85 } // namespace gpu | 92 } // namespace gpu |
| 86 | 93 |
| 87 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ | 94 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
| 88 | 95 |
| OLD | NEW |