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

Unified Diff: ui/gl/scoped_binders.cc

Issue 1419733005: gpu: Add YCbCr 420v extension. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Actually enable/disable capabilities. Typo. Created 5 years 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
« no previous file with comments | « ui/gl/scoped_binders.h ('k') | ui/gl/test/gl_image_test_support.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/scoped_binders.cc
diff --git a/ui/gl/scoped_binders.cc b/ui/gl/scoped_binders.cc
index bb2b290105622a9823b49b284d6bbd72aa6f36bc..4480f8030ca78cd5d0707280b348d0c3c99438f9 100644
--- a/ui/gl/scoped_binders.cc
+++ b/ui/gl/scoped_binders.cc
@@ -29,6 +29,16 @@ ScopedFrameBufferBinder::~ScopedFrameBufferBinder() {
}
}
+ScopedActiveTexture::ScopedActiveTexture(unsigned int texture)
+ : old_texture_(-1) {
+ glGetIntegerv(GL_ACTIVE_TEXTURE, &old_texture_);
+ glActiveTexture(texture);
+}
+
+ScopedActiveTexture::~ScopedActiveTexture() {
+ glActiveTexture(old_texture_);
+}
+
ScopedTextureBinder::ScopedTextureBinder(unsigned int target, unsigned int id)
: state_restorer_(!GLContext::GetCurrent()
? NULL
@@ -47,8 +57,11 @@ ScopedTextureBinder::ScopedTextureBinder(unsigned int target, unsigned int id)
case GL_TEXTURE_EXTERNAL_OES:
target_getter = GL_TEXTURE_BINDING_EXTERNAL_OES;
break;
+ case GL_TEXTURE_RECTANGLE_ARB:
+ target_getter = GL_TEXTURE_BINDING_RECTANGLE_ARB;
+ break;
default:
- NOTIMPLEMENTED() << "Target not part of OpenGL ES 2.0 spec.";
+ NOTIMPLEMENTED() << " Target not supported.";
}
glGetIntegerv(target_getter, &old_id_);
}
@@ -65,4 +78,102 @@ ScopedTextureBinder::~ScopedTextureBinder() {
}
}
+ScopedUseProgram::ScopedUseProgram(unsigned int program) : old_program_(-1) {
+ glGetIntegerv(GL_CURRENT_PROGRAM, &old_program_);
+ glUseProgram(program);
+}
+
+ScopedUseProgram::~ScopedUseProgram() {
+ glUseProgram(old_program_);
+}
+
+ScopedVertexAttribArray::ScopedVertexAttribArray(unsigned int index,
+ int size,
+ unsigned int type,
+ char normalized,
+ int stride,
+ const void* pointer)
+ : buffer_(0),
+ enabled_(GL_FALSE),
+ index_(index),
+ size_(-1),
+ type_(-1),
+ normalized_(GL_FALSE),
+ stride_(0),
+ pointer_(0) {
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, &buffer_);
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &enabled_);
+ glEnableVertexAttribArray(index);
+
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_SIZE, &size_);
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_TYPE, &type_);
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &normalized_);
+ glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &stride_);
+ glGetVertexAttribPointerv(index, GL_VERTEX_ATTRIB_ARRAY_POINTER, &pointer_);
+
+ glVertexAttribPointer(index, size, type, normalized, stride, pointer);
+}
+
+ScopedVertexAttribArray::~ScopedVertexAttribArray() {
+ ScopedBufferBinder buffer_binder(GL_ARRAY_BUFFER, buffer_);
+ glVertexAttribPointer(index_, size_, type_, normalized_, stride_, pointer_);
+ if (enabled_ == GL_FALSE) {
+ glDisableVertexAttribArray(index_);
+ }
+}
+
+ScopedBufferBinder::ScopedBufferBinder(unsigned int target, unsigned int id)
+ : target_(target), old_id_(-1) {
+ GLenum target_getter = 0;
+ switch (target) {
+ case GL_ARRAY_BUFFER:
+ target_getter = GL_ARRAY_BUFFER_BINDING;
+ break;
+ default:
+ NOTIMPLEMENTED() << " Target not supported.";
+ }
+ glGetIntegerv(target_getter, &old_id_);
+ glBindBuffer(target_, id);
+}
+
+ScopedBufferBinder::~ScopedBufferBinder() {
+ glBindBuffer(target_, old_id_);
+}
+
+ScopedViewport::ScopedViewport(int x, int y, int width, int height) {
+ glGetIntegerv(GL_VIEWPORT, data_);
+ glViewport(x, y, width, height);
+}
+
+ScopedViewport::~ScopedViewport() {
+ glViewport(data_[0], data_[1], data_[2], data_[3]);
+}
+
+ScopedColorMask::ScopedColorMask(char red, char green, char blue, char alpha) {
+ glGetBooleanv(GL_COLOR_WRITEMASK, colors_);
+ glColorMask(red, green, blue, alpha);
+}
+
+ScopedColorMask::~ScopedColorMask() {
+ glColorMask(colors_[0], colors_[1], colors_[2], colors_[3]);
+}
+
+ScopedCapability::ScopedCapability(unsigned capability, unsigned char enabled)
+ : capability_(capability) {
+ enabled_ = glIsEnabled(capability_);
+ if (enabled == GL_TRUE) {
+ glEnable(capability);
+ } else {
+ glDisable(capability);
+ }
+}
+
+ScopedCapability::~ScopedCapability() {
+ if (enabled_ == GL_TRUE) {
+ glEnable(capability_);
+ } else {
+ glDisable(capability_);
+ }
+}
+
} // namespace gfx
« no previous file with comments | « ui/gl/scoped_binders.h ('k') | ui/gl/test/gl_image_test_support.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698