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

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: Address piman's comments. Created 5 years, 1 month 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..74d541314353002b52d9c4d968955cd1f016bd4c 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,105 @@ 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)
+ : enabled_(GL_FALSE),
+ index_(index),
+ size_(-1),
+ type_(-1),
+ normalized_(GL_FALSE),
+ stride_(0),
+ pointer_(0) {
+ 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() {
+ glVertexAttribPointer(index_, size_, type_, normalized_, stride_, pointer_);
piman 2015/11/04 22:49:45 So this one is a little tricky, because there's an
Daniele Castagna 2015/12/03 23:12:08 Done.
+ 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]);
+}
+
+// static
+GLenum ScopedCapabilitiesRestorer::kCapabilities[] = {
+ GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST,
+ GL_DITHER, GL_POLYGON_OFFSET_FILL, GL_SAMPLE_ALPHA_TO_COVERAGE,
piman 2015/11/04 22:49:45 - polygon offset shouldn't matter since you disabl
Daniele Castagna 2015/12/03 23:12:08 Ack. This ScopedCapabilitiesRestorer could be used
piman 2015/12/04 00:02:16 Sure, but why these ones and not others too? E.g.
Daniele Castagna 2015/12/04 00:40:18 Not sure why I left GL_SAMPLE_COVERAGE out. My int
+ GL_SCISSOR_TEST, GL_STENCIL_TEST};
+
+ScopedCapabilitiesRestorer::ScopedCapabilitiesRestorer() {
+ static_assert(arraysize(kCapabilities) <= arraysize(enabled_),
+ "enabled_ array size should be at least kCapabilities size. ");
+ for (size_t i = 0; i < arraysize(kCapabilities); ++i) {
+ enabled_[i] = glIsEnabled(kCapabilities[i]);
+ }
+}
+
+ScopedCapabilitiesRestorer::~ScopedCapabilitiesRestorer() {
+ for (size_t i = 0; i < arraysize(kCapabilities); ++i) {
+ if (enabled_[i] == GL_TRUE) {
+ glEnable(kCapabilities[i]);
+ } else {
+ glDisable(kCapabilities[i]);
+ }
+ }
+}
+
} // 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