1 // Copyright (c) 2013 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.
5 #ifndef CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_
6 #define CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_
8 #include "base/basictypes.h"
9 #include "base/memory/weak_ptr.h"
10 #include "content/common/gpu/gpu_command_buffer_stub.h"
11 #include "ipc/ipc_listener.h"
12 #include "ui/gl/android/surface_texture.h"
13 #include "ui/gl/gl_image.h"
21 class StreamTexture
: public gfx::GLImage
,
23 public GpuCommandBufferStub::DestructionObserver
{
25 static bool Create(GpuCommandBufferStub
* owner_stub
,
26 uint32 client_texture_id
,
30 StreamTexture(GpuCommandBufferStub
* owner_stub
,
33 virtual ~StreamTexture();
35 // gfx::GLImage implementation:
36 virtual void Destroy() OVERRIDE
;
37 virtual gfx::Size
GetSize() OVERRIDE
;
38 virtual bool BindTexImage(unsigned target
) OVERRIDE
;
39 virtual void ReleaseTexImage(unsigned target
) OVERRIDE
;
40 virtual void WillUseTexImage() OVERRIDE
;
41 virtual void DidUseTexImage() OVERRIDE
{}
42 virtual void WillModifyTexImage() OVERRIDE
{}
43 virtual void DidModifyTexImage() OVERRIDE
{}
45 // GpuCommandBufferStub::DestructionObserver implementation.
46 virtual void OnWillDestroyStub() OVERRIDE
;
48 // Called when a new frame is available for the SurfaceTexture.
49 void OnFrameAvailable();
51 // IPC::Listener implementation:
52 virtual bool OnMessageReceived(const IPC::Message
& message
) OVERRIDE
;
54 // IPC message handlers:
55 void OnStartListening();
56 void OnEstablishPeer(int32 primary_id
, int32 secondary_id
);
57 void OnSetSize(const gfx::Size
& size
) { size_
= size
; }
59 scoped_refptr
<gfx::SurfaceTexture
> surface_texture_
;
61 // Current transform matrix of the surface texture.
62 float current_matrix_
[16];
64 // Current size of the surface texture.
67 // Whether we ever bound a valid frame.
68 bool has_valid_frame_
;
70 // Whether a new frame is available that we should update to.
71 bool has_pending_frame_
;
73 GpuCommandBufferStub
* owner_stub_
;
77 base::WeakPtrFactory
<StreamTexture
> weak_factory_
;
78 DISALLOW_COPY_AND_ASSIGN(StreamTexture
);
81 } // namespace content
83 #endif // CONTENT_COMMON_GPU_STREAM_TEXTURE_ANDROID_H_