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

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

Issue 254753002: gpu: Add support for GL_TEXTURE_RECTANGLE_ARB target to CHROMIUM_copy_texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 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
diff --git a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
index af564389ea5c63d1579e2c685b7f14926dd8d498..87c78038f3cb9bedc646c68568c96ddb78ef38d1 100644
--- a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
+++ b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
@@ -21,12 +21,15 @@
#define SHADER_2D(src) \
"#define SamplerType sampler2D\n" \
"#define TextureLookup texture2D\n" SHADER(src)
+#define SHADER_RECTANGLE_ARB(src) \
+ "#define SamplerType samplerRect\n" \
+ "#define TextureLookup textureRect\n" SHADER(src)
#define SHADER_EXTERNAL_OES(src) \
"#extension GL_OES_EGL_image_external : require\n" \
"#define SamplerType samplerExternalOES\n" \
"#define TextureLookup texture2D\n" SHADER(src)
#define FRAGMENT_SHADERS(src) \
- SHADER_2D(src), SHADER_EXTERNAL_OES(src)
+ SHADER_2D(src), SHADER_RECTANGLE_ARB(src), SHADER_EXTERNAL_OES(src)
namespace {
@@ -38,10 +41,13 @@ enum VertexShaderId {
enum FragmentShaderId {
FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_EXTERNAL_OES,
FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_EXTERNAL_OES,
NUM_FRAGMENT_SHADERS,
};
@@ -50,20 +56,24 @@ const char* vertex_shader_source[NUM_VERTEX_SHADERS] = {
// VERTEX_SHADER_COPY_TEXTURE
SHADER(
uniform mat4 u_matrix;
+ uniform vec2 u_half_size;
attribute vec4 a_position;
varying TexCoordPrecision vec2 v_uv;
void main(void) {
gl_Position = u_matrix * a_position;
- v_uv = a_position.xy * vec2(0.5, 0.5) + vec2(0.5, 0.5);
+ v_uv = a_position.xy * vec2(u_half_size.s, u_half_size.t) +
+ vec2(u_half_size.s, u_half_size.t);
}),
// VERTEX_SHADER_COPY_TEXTURE_FLIP_Y
SHADER(
uniform mat4 u_matrix;
+ uniform vec2 u_half_size;
attribute vec4 a_position;
varying TexCoordPrecision vec2 v_uv;
void main(void) {
gl_Position = u_matrix * a_position;
- v_uv = a_position.xy * vec2(0.5, -0.5) + vec2(0.5, 0.5);
+ v_uv = a_position.xy * vec2(u_half_size.s, -u_half_size.t) +
+ vec2(u_half_size.s, u_half_size.t);
}),
};
@@ -114,6 +124,7 @@ FragmentShaderId GetFragmentShaderId(bool premultiply_alpha,
GLenum target) {
enum {
SAMPLER_2D,
+ SAMPLER_RECTANGLE_ARB,
SAMPLER_EXTERNAL_OES,
NUM_SAMPLERS
};
@@ -123,18 +134,22 @@ FragmentShaderId GetFragmentShaderId(bool premultiply_alpha,
static FragmentShaderId shader_ids[][NUM_SAMPLERS] = {
{
FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
},
{
FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_EXTERNAL_OES,
},
{
FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_EXTERNAL_OES,
},
{
FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
}};
@@ -144,6 +159,8 @@ FragmentShaderId GetFragmentShaderId(bool premultiply_alpha,
switch (target) {
case GL_TEXTURE_2D:
return shader_ids[index][SAMPLER_2D];
+ case GL_TEXTURE_RECTANGLE_ARB:
+ return shader_ids[index][SAMPLER_RECTANGLE_ARB];
case GL_TEXTURE_EXTERNAL_OES:
return shader_ids[index][SAMPLER_EXTERNAL_OES];
default:
@@ -261,6 +278,7 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
bool unpremultiply_alpha,
const GLfloat transform_matrix[16]) {
DCHECK(source_target == GL_TEXTURE_2D ||
+ source_target == GL_TEXTURE_RECTANGLE_ARB ||
source_target == GL_TEXTURE_EXTERNAL_OES);
if (!initialized_) {
DLOG(ERROR) << "CopyTextureCHROMIUM: Uninitialized manager.";
@@ -300,6 +318,7 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
DLOG(ERROR) << "CopyTextureCHROMIUM: program link failure.";
#endif
info->matrix_handle = glGetUniformLocation(info->program, "u_matrix");
+ info->half_size_handle = glGetUniformLocation(info->program, "u_half_size");
info->sampler_handle = glGetUniformLocation(info->program, "u_sampler");
}
glUseProgram(info->program);
@@ -315,6 +334,10 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
#endif
glUniformMatrix4fv(info->matrix_handle, 1, GL_FALSE, transform_matrix);
+ if (source_target == GL_TEXTURE_RECTANGLE_ARB)
+ glUniform2f(info->half_size_handle, width / 2.0f, height / 2.0f);
+ else
+ glUniform2f(info->half_size_handle, 0.5f, 0.5f);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, dest_id);
// NVidia drivers require texture settings to be a certain way
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.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