Home | History | Annotate | Download | only in client
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef GPU_COMMAND_BUFFER_CLIENT_SHARE_GROUP_H_
      6 #define GPU_COMMAND_BUFFER_CLIENT_SHARE_GROUP_H_
      7 
      8 #include <GLES2/gl2.h>
      9 #include "base/memory/scoped_ptr.h"
     10 #include "gles2_impl_export.h"
     11 #include "gpu/command_buffer/client/ref_counted.h"
     12 #include "gpu/command_buffer/common/gles2_cmd_format.h"
     13 
     14 namespace gpu {
     15 namespace gles2 {
     16 
     17 class GLES2Implementation;
     18 class GLES2ImplementationTest;
     19 class ProgramInfoManager;
     20 
     21 typedef void (GLES2Implementation::*DeleteFn)(GLsizei n, const GLuint* ids);
     22 
     23 // Base class for IdHandlers
     24 class IdHandlerInterface {
     25  public:
     26   IdHandlerInterface() { }
     27   virtual ~IdHandlerInterface() { }
     28 
     29   // Makes some ids at or above id_offset.
     30   virtual void MakeIds(
     31       GLES2Implementation* gl_impl,
     32       GLuint id_offset, GLsizei n, GLuint* ids) = 0;
     33 
     34   // Frees some ids.
     35   virtual bool FreeIds(
     36       GLES2Implementation* gl_impl, GLsizei n, const GLuint* ids,
     37       DeleteFn delete_fn) = 0;
     38 
     39   // Marks an id as used for glBind functions. id = 0 does nothing.
     40   virtual bool MarkAsUsedForBind(GLuint id) = 0;
     41 };
     42 
     43 // ShareGroup manages shared resources for contexts that are sharing resources.
     44 class GLES2_IMPL_EXPORT ShareGroup
     45     : public gpu::RefCountedThreadSafe<ShareGroup> {
     46  public:
     47   ShareGroup(bool bind_generates_resource);
     48 
     49   bool bind_generates_resource() const {
     50     return bind_generates_resource_;
     51   }
     52 
     53   bool Initialize();
     54 
     55   IdHandlerInterface* GetIdHandler(int namespace_id) const {
     56     return id_handlers_[namespace_id].get();
     57   }
     58 
     59   ProgramInfoManager* program_info_manager() {
     60     return program_info_manager_.get();
     61   }
     62 
     63  private:
     64   friend class gpu::RefCountedThreadSafe<ShareGroup>;
     65   friend class gpu::gles2::GLES2ImplementationTest;
     66   ~ShareGroup();
     67 
     68   // Install a new program info manager. Used for testing only;
     69   void set_program_info_manager(ProgramInfoManager* manager);
     70 
     71   scoped_ptr<IdHandlerInterface> id_handlers_[id_namespaces::kNumIdNamespaces];
     72   scoped_ptr<ProgramInfoManager> program_info_manager_;
     73 
     74   bool bind_generates_resource_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(ShareGroup);
     77 };
     78 
     79 }  // namespace gles2
     80 }  // namespace gpu
     81 
     82 #endif  // GPU_COMMAND_BUFFER_CLIENT_SHARE_GROUP_H_
     83