Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc

Issue 2080943002: gpu: Use a VAO as required by the core profile in ClearFramebuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc b/gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc
index 6a21c49fd9a05c5f9b8afb82cb66e26a3efa1024..d42dd195820396f04de09b9a9db43d3ef6f87fc0 100644
--- a/gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc
+++ b/gpu/command_buffer/service/gles2_cmd_clear_framebuffer.cc
@@ -56,9 +56,10 @@ void CompileShader(GLuint shader, const char* shader_source) {
namespace gpu {
ClearFramebufferResourceManager::ClearFramebufferResourceManager(
- const gles2::GLES2Decoder* decoder)
- : initialized_(false), program_(0u), buffer_id_(0u) {
- Initialize(decoder);
+ const gles2::GLES2Decoder* decoder,
+ const gles2::FeatureInfo::FeatureFlags& feature_flags)
+ : initialized_(false), program_(0u), vao_(0), buffer_id_(0u) {
+ Initialize(decoder, feature_flags);
}
ClearFramebufferResourceManager::~ClearFramebufferResourceManager() {
@@ -67,12 +68,13 @@ ClearFramebufferResourceManager::~ClearFramebufferResourceManager() {
}
void ClearFramebufferResourceManager::Initialize(
- const gles2::GLES2Decoder* decoder) {
+ const gles2::GLES2Decoder* decoder,
+ const gles2::FeatureInfo::FeatureFlags& feature_flags) {
static_assert(
kVertexPositionAttrib == 0u,
"kVertexPositionAttrib must be 0");
- DCHECK(!buffer_id_);
+ DCHECK(!buffer_id_);
glGenBuffersARB(1, &buffer_id_);
glBindBuffer(GL_ARRAY_BUFFER, buffer_id_);
const GLfloat kQuadVertices[] = {-1.0f, -1.0f,
@@ -81,6 +83,19 @@ void ClearFramebufferResourceManager::Initialize(
-1.0f, 1.0f};
glBufferData(
GL_ARRAY_BUFFER, sizeof(kQuadVertices), kQuadVertices, GL_STATIC_DRAW);
+
+ DCHECK(!vao_);
+
+ if (feature_flags.native_vertex_array_object) {
+ glGenVertexArraysOES(1, &vao_);
+
+ glBindVertexArrayOES(vao_);
+ glEnableVertexAttribArray(kVertexPositionAttrib);
+ glVertexAttribPointer(kVertexPositionAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
+
+ decoder->RestoreAllAttributes();
+ }
+
decoder->RestoreBufferBindings();
initialized_ = true;
}
@@ -90,6 +105,12 @@ void ClearFramebufferResourceManager::Destroy() {
return;
glDeleteProgram(program_);
+
+ if (vao_ != 0) {
+ glDeleteVertexArraysOES(1, &vao_);
+ vao_ = 0;
+ }
+
glDeleteBuffersARB(1, &buffer_id_);
buffer_id_ = 0;
}
@@ -140,11 +161,14 @@ void ClearFramebufferResourceManager::ClearFramebuffer(
DLOG(ERROR) << "Invalid shader.";
#endif
- decoder->ClearAllAttributes();
- glEnableVertexAttribArray(kVertexPositionAttrib);
-
- glBindBuffer(GL_ARRAY_BUFFER, buffer_id_);
- glVertexAttribPointer(kVertexPositionAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
+ if (vao_) {
+ glBindVertexArrayOES(vao_);
+ } else {
+ decoder->ClearAllAttributes();
+ glBindBuffer(GL_ARRAY_BUFFER, buffer_id_);
+ glEnableVertexAttribArray(kVertexPositionAttrib);
+ glVertexAttribPointer(kVertexPositionAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
+ }
glUniform1f(depth_handle_, clear_depth_value);
glUniform4f(color_handle_, clear_color_red, clear_color_green,
@@ -179,9 +203,11 @@ void ClearFramebufferResourceManager::ClearFramebuffer(
glViewport(0, 0, framebuffer_size.width(), framebuffer_size.height());
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ if (vao_ == 0) {
+ decoder->RestoreBufferBindings();
+ }
decoder->RestoreAllAttributes();
decoder->RestoreProgramBindings();
- decoder->RestoreBufferBindings();
decoder->RestoreGlobalState();
}
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_clear_framebuffer.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698