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

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

Issue 10535174: Addition of unpremultiply setting to GL_CHROMIUM_copy_texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 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_copy_texture_chromium.cc
===================================================================
--- gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc (revision 141671)
+++ gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc (working copy)
@@ -27,34 +27,45 @@
1.0f, 1.0f,
0.0f, 1.0f };
-const int kNumShaders = 5;
+const int kNumShaders = 7;
enum ShaderId {
VERTEX_SHADER_POS_TEX,
FRAGMENT_SHADER_TEX,
FRAGMENT_SHADER_TEX_FLIP_Y,
FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA,
- FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA_FLIP_Y
+ FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA,
+ FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA_FLIP_Y,
+ FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA_FLIP_Y
};
enum ProgramId {
PROGRAM_COPY_TEXTURE,
PROGRAM_COPY_TEXTURE_FLIP_Y,
PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA,
- PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA_FLIPY
+ PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA,
+ PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA_FLIPY,
+ PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_FLIPY
};
// Returns the correct program to evaluate the copy operation for
// the CHROMIUM_flipy and premultiply alpha pixel store settings.
-ProgramId GetProgram(bool flip_y, bool premultiply_alpha) {
+ProgramId GetProgram(bool flip_y, bool premultiply_alpha,
+ bool unpremultiply_alpha) {
if (flip_y && premultiply_alpha)
return PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA_FLIPY;
+ if (flip_y && unpremultiply_alpha)
+ return PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_FLIPY;
+
if (flip_y)
return PROGRAM_COPY_TEXTURE_FLIP_Y;
if (premultiply_alpha)
return PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA;
+ if (unpremultiply_alpha)
+ return PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA;
+
return PROGRAM_COPY_TEXTURE;
}
@@ -91,6 +102,14 @@
gl_FragColor = texture2D(u_texSampler, v_uv.st);
gl_FragColor.rgb *= gl_FragColor.a;
});
+ case FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA:
+ return SHADER(
+ uniform sampler2D u_texSampler;
+ varying vec2 v_uv;
+ void main(void) {
+ gl_FragColor = texture2D(u_texSampler, v_uv.st);
+ gl_FragColor.rgb /= gl_FragColor.a;
greggman 2012/06/15 00:11:45 IF the spec actually says that can terminate maybe
Jeff Timanus 2012/06/18 14:50:24 Straight from the spec: Similarly, treatment of
+ });
case FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA_FLIP_Y:
return SHADER(
uniform sampler2D u_texSampler;
@@ -99,6 +118,14 @@
gl_FragColor = texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
gl_FragColor.rgb *= gl_FragColor.a;
});
+ case FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA_FLIP_Y:
+ return SHADER(
+ uniform sampler2D u_texSampler;
+ varying vec2 v_uv;
+ void main(void) {
+ gl_FragColor = texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
+ gl_FragColor.rgb /= gl_FragColor.a;
+ });
default:
return 0;
}
@@ -184,13 +211,14 @@
GLuint dest_id,
GLint level,
bool flip_y,
- bool premultiply_alpha) {
+ bool premultiply_alpha,
+ bool unpremultiply_alpha) {
if (!initialized_) {
DLOG(ERROR) << "CopyTextureCHROMIUM: Uninitialized manager.";
return;
}
- GLuint program = GetProgram(flip_y, premultiply_alpha);
+ GLuint program = GetProgram(flip_y, premultiply_alpha, unpremultiply_alpha);
glUseProgram(programs_[program]);
#ifndef NDEBUG

Powered by Google App Engine
This is Rietveld 408576698