summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-04 00:58:12 +0000
committerapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-04 00:58:12 +0000
commita96a6021f0cf7acf3c54b9050d1d313b12ba2748 (patch)
treeea7d5b8a23c6904784cbdaec3e944ca0bbac77c4 /gpu
parentb79896c481a82ef97a4f378680e215009e07bf0b (diff)
downloadchromium_src-a96a6021f0cf7acf3c54b9050d1d313b12ba2748.zip
chromium_src-a96a6021f0cf7acf3c54b9050d1d313b12ba2748.tar.gz
chromium_src-a96a6021f0cf7acf3c54b9050d1d313b12ba2748.tar.bz2
Added ReleaseCurrent to GLES2CmdDecoder.
I need it for http://codereview.chromium.org/8060045/ Also enabled the SwapBuffers callback on all platforms for he same reason. Review URL: http://codereview.chromium.org/8430042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc20
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.h5
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_mock.h1
3 files changed, 12 insertions, 14 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 6a10e92..29695b4 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -504,6 +504,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size);
void UpdateParentTextureInfo();
virtual bool MakeCurrent();
+ virtual void ReleaseCurrent();
virtual GLES2Util* GetGLES2Util() { return &util_; }
virtual gfx::GLContext* GetGLContext() { return context_.get(); }
virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); }
@@ -512,9 +513,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
virtual void SetGLError(GLenum error, const char* msg);
virtual void SetResizeCallback(Callback1<gfx::Size>::Type* callback);
-#if defined(OS_MACOSX)
virtual void SetSwapBuffersCallback(Callback0::Type* callback);
-#endif
virtual void SetStreamTextureManager(StreamTextureManager* manager);
virtual bool GetServiceTextureId(uint32 client_texture_id,
@@ -1362,9 +1361,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_;
-#if defined(OS_MACOSX)
scoped_ptr<Callback0::Type> swap_buffers_callback_;
-#endif
StreamTextureManager* stream_texture_manager_;
@@ -2267,6 +2264,11 @@ bool GLES2DecoderImpl::MakeCurrent() {
return result;
}
+void GLES2DecoderImpl::ReleaseCurrent() {
+ if (context_.get())
+ context_->ReleaseCurrent(surface_.get());
+}
+
void GLES2DecoderImpl::RestoreCurrentRenderbufferBindings() {
RenderbufferManager::RenderbufferInfo* renderbuffer =
GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
@@ -2461,11 +2463,9 @@ void GLES2DecoderImpl::SetResizeCallback(
resize_callback_.reset(callback);
}
-#if defined(OS_MACOSX)
void GLES2DecoderImpl::SetSwapBuffersCallback(Callback0::Type* callback) {
swap_buffers_callback_.reset(callback);
}
-#endif
void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) {
stream_texture_manager_ = manager;
@@ -7058,11 +7058,10 @@ error::Error GLES2DecoderImpl::HandleSwapBuffers(
// For multisampled buffers, bind the resolved frame buffer so that
// callbacks can call ReadPixels or CopyTexImage2D.
ScopedResolvedFrameBufferBinder binder(this, true, false);
-#if defined(OS_MACOSX)
if (swap_buffers_callback_.get()) {
swap_buffers_callback_->Run();
}
-#endif
+
return error::kNoError;
} else {
ScopedFrameBufferBinder binder(this,
@@ -7083,11 +7082,10 @@ error::Error GLES2DecoderImpl::HandleSwapBuffers(
// Run the callback with |binder| in scope, so that the callback can call
// ReadPixels or CopyTexImage2D.
-#if defined(OS_MACOSX)
if (swap_buffers_callback_.get()) {
swap_buffers_callback_->Run();
}
-#endif
+
return error::kNoError;
}
} else {
@@ -7098,11 +7096,9 @@ error::Error GLES2DecoderImpl::HandleSwapBuffers(
}
}
-#if defined(OS_MACOSX)
if (swap_buffers_callback_.get()) {
swap_buffers_callback_->Run();
}
-#endif
return error::kNoError;
}
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.h b/gpu/command_buffer/service/gles2_cmd_decoder.h
index 6398bff..fb8534d 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -90,6 +90,9 @@ class GLES2Decoder : public CommonDecoder {
// Make this decoder's GL context current.
virtual bool MakeCurrent() = 0;
+ // Have the decoder release the context.
+ virtual void ReleaseCurrent() = 0;
+
// Gets the GLES2 Util which holds info.
virtual GLES2Util* GetGLES2Util() = 0;
@@ -107,10 +110,8 @@ class GLES2Decoder : public CommonDecoder {
virtual void SetResizeCallback(
Callback1<gfx::Size>::Type* callback) = 0;
-#if defined(OS_MACOSX)
// Sets a callback which is called when a SwapBuffers command is processed.
virtual void SetSwapBuffersCallback(Callback0::Type* callback) = 0;
-#endif
virtual void SetStreamTextureManager(StreamTextureManager* manager) = 0;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
index 7cdd56c..723ee0b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
@@ -41,6 +41,7 @@ class MockGLES2Decoder : public GLES2Decoder {
MOCK_METHOD2(SetParent, bool(GLES2Decoder* parent, uint32 parent_texture_id));
MOCK_METHOD1(ResizeOffscreenFrameBuffer, bool(const gfx::Size& size));
MOCK_METHOD0(MakeCurrent, bool());
+ MOCK_METHOD0(ReleaseCurrent, void());
MOCK_METHOD1(GetServiceIdForTesting, uint32(uint32 client_id));
MOCK_METHOD0(GetGLES2Util, GLES2Util*());
MOCK_METHOD0(GetGLSurface, gfx::GLSurface*());