Index: ui/gl/test/gl_image_test_support.cc |
diff --git a/ui/gl/test/gl_image_test_support.cc b/ui/gl/test/gl_image_test_support.cc |
index 79996d5edf11fc86a70cb6675bcef1de2bd4e3b4..74058de3df5de99febaef9bb392f5dce3e24dc7f 100644 |
--- a/ui/gl/test/gl_image_test_support.cc |
+++ b/ui/gl/test/gl_image_test_support.cc |
@@ -6,22 +6,16 @@ |
#include <vector> |
+#include "base/strings/stringize_macros.h" |
+#include "base/strings/stringprintf.h" |
+#include "ui/gl/gl_helper.h" |
#include "ui/gl/gl_implementation.h" |
#include "ui/gl/test/gl_surface_test_support.h" |
-#if defined(USE_OZONE) |
-#include "base/message_loop/message_loop.h" |
-#endif |
- |
namespace gl { |
// static |
void GLImageTestSupport::InitializeGL() { |
-#if defined(USE_OZONE) |
- // On Ozone, the backend initializes the event system using a UI thread. |
- base::MessageLoopForUI main_loop; |
-#endif |
- |
std::vector<gfx::GLImplementation> allowed_impls; |
GetAllowedGLImplementations(&allowed_impls); |
DCHECK(!allowed_impls.empty()); |
@@ -130,4 +124,49 @@ void GLImageTestSupport::SetBufferDataToColor(int width, |
NOTREACHED(); |
} |
+// static |
+GLuint GLImageTestSupport::CreateSingleTextureProgram() { |
+ // clang-format off |
+ const char kVertexShader[] = STRINGIZE( |
+ attribute vec2 a_position; |
+ varying vec2 v_texCoord; |
+ void main() { |
+ gl_Position = vec4(a_position.x, a_position.y, 0.0, 1.0); |
+ v_texCoord = (a_position + vec2(1.0, 1.0)) * 0.5; |
+ } |
+ ); |
+ const char kFragmentShader[] = STRINGIZE( |
+ uniform sampler2D a_texture; |
+ varying vec2 v_texCoord; |
+ void main() { |
+ gl_FragColor = texture2D(a_texture, v_texCoord); |
+ } |
+ ); |
+ const char kShaderFloatPrecision[] = STRINGIZE( |
+ precision mediump float; |
+ ); |
+ // clang-format on |
+ |
+ GLuint vertex_shader = |
+ gfx::GLHelper::LoadShader(GL_VERTEX_SHADER, kVertexShader); |
+ bool is_gles = gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2; |
+ GLuint fragment_shader = gfx::GLHelper::LoadShader( |
+ GL_FRAGMENT_SHADER, |
+ base::StringPrintf("%s%s", is_gles ? kShaderFloatPrecision : "", |
+ kFragmentShader) |
+ .c_str()); |
+ GLuint program = gfx::GLHelper::SetupProgram(vertex_shader, fragment_shader); |
+ DCHECK_NE(program, 0u); |
+ glUseProgram(program); |
+ |
+ GLint sampler_location = glGetUniformLocation(program, "a_texture"); |
+ DCHECK_NE(sampler_location, -1); |
+ glUniform1i(sampler_location, 0); |
+ |
+ glDeleteShader(vertex_shader); |
+ glDeleteShader(fragment_shader); |
+ |
+ return program; |
+} |
+ |
} // namespace gl |