Adds renderbuffer and framebuffer tracking so we can
clear the buffers.
Note: I did not actually write the clearing code
or the binding code. Will do in another CL after
Al checks in his code.
TEST=unit tests
BUG=none
Review URL: http://codereview.chromium.org/1243002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42577 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 4c99bff..512a819 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -20,10 +20,12 @@
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/framebuffer_manager.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/command_buffer/service/gles2_cmd_validation.h"
#include "gpu/command_buffer/service/id_manager.h"
#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include "gpu/command_buffer/service/shader_manager.h"
#include "gpu/command_buffer/service/texture_manager.h"
#if defined(UNIT_TEST)
@@ -260,6 +262,14 @@
GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
friend void GLDeleteBuffersHelper(
GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
+ friend void GLGenFramebuffersHelper(
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
+ friend void GLDeleteFramebuffersHelper(
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
+ friend void GLGenRenderbuffersHelper(
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
+ friend void GLDeleteRenderbuffersHelper(
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids);
// TODO(gman): Cache these pointers?
IdManager* id_manager() {
@@ -270,6 +280,14 @@
return group_->buffer_manager();
}
+ RenderbufferManager* renderbuffer_manager() {
+ return group_->renderbuffer_manager();
+ }
+
+ FramebufferManager* framebuffer_manager() {
+ return group_->framebuffer_manager();
+ }
+
ProgramManager* program_manager() {
return group_->program_manager();
}
@@ -416,6 +434,42 @@
// with deleted buffers.
void RemoveBufferInfo(GLuint buffer_id);
+ // Creates a framebuffer info for the given framebuffer.
+ void CreateFramebufferInfo(GLuint framebuffer) {
+ return framebuffer_manager()->CreateFramebufferInfo(framebuffer);
+ }
+
+ // Gets the framebuffer info for the given framebuffer.
+ FramebufferManager::FramebufferInfo* GetFramebufferInfo(
+ GLuint framebuffer) {
+ FramebufferManager::FramebufferInfo* info =
+ framebuffer_manager()->GetFramebufferInfo(framebuffer);
+ return (info && !info->IsDeleted()) ? info : NULL;
+ }
+
+ // Removes the framebuffer info for the given framebuffer.
+ void RemoveFramebufferInfo(GLuint framebuffer_id) {
+ framebuffer_manager()->RemoveFramebufferInfo(framebuffer_id);
+ }
+
+ // Creates a renderbuffer info for the given renderbuffer.
+ void CreateRenderbufferInfo(GLuint renderbuffer) {
+ return renderbuffer_manager()->CreateRenderbufferInfo(renderbuffer);
+ }
+
+ // Gets the renderbuffer info for the given renderbuffer.
+ RenderbufferManager::RenderbufferInfo* GetRenderbufferInfo(
+ GLuint renderbuffer) {
+ RenderbufferManager::RenderbufferInfo* info =
+ renderbuffer_manager()->GetRenderbufferInfo(renderbuffer);
+ return (info && !info->IsDeleted()) ? info : NULL;
+ }
+
+ // Removes the renderbuffer info for the given renderbuffer.
+ void RemoveRenderbufferInfo(GLuint renderbuffer_id) {
+ renderbuffer_manager()->RemoveRenderbufferInfo(renderbuffer_id);
+ }
+
error::Error GetAttribLocationHelper(
GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
const std::string& name_str);
@@ -936,13 +990,21 @@
}
void GLGenFramebuffersHelper(
- GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids) {
glGenFramebuffersEXT(n, ids);
+ // TODO(gman): handle error
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ decoder->CreateFramebufferInfo(ids[ii]);
+ }
}
void GLGenRenderbuffersHelper(
- GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids) {
glGenRenderbuffersEXT(n, ids);
+ // TODO(gman): handle error
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ decoder->CreateRenderbufferInfo(ids[ii]);
+ }
}
void GLGenTexturesHelper(
@@ -964,13 +1026,21 @@
}
void GLDeleteFramebuffersHelper(
- GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids) {
glDeleteFramebuffersEXT(n, ids);
+ // TODO(gman): handle error
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ decoder->RemoveFramebufferInfo(ids[ii]);
+ }
}
void GLDeleteRenderbuffersHelper(
- GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
+ GLES2DecoderImpl* decoder, GLsizei n, GLuint* ids) {
glDeleteRenderbuffersEXT(n, ids);
+ // TODO(gman): handle error
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ decoder->RemoveRenderbufferInfo(ids[ii]);
+ }
}
void GLDeleteTexturesHelper(