| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/shell/platform/linux/fl_texture_gl_private.h" |
| #include "flutter/shell/platform/linux/fl_texture_private.h" |
| #include "flutter/shell/platform/linux/fl_texture_registrar_private.h" |
| #include "flutter/shell/platform/linux/public/flutter_linux/fl_texture.h" |
| #include "flutter/shell/platform/linux/public/flutter_linux/fl_texture_registrar.h" |
| #include "flutter/shell/platform/linux/testing/fl_test.h" |
| #include "gtest/gtest.h" |
| |
| #include <epoxy/gl.h> |
| |
| static constexpr uint32_t kBufferWidth = 4u; |
| static constexpr uint32_t kBufferHeight = 4u; |
| static constexpr uint32_t kRealBufferWidth = 2u; |
| static constexpr uint32_t kRealBufferHeight = 2u; |
| |
| G_DECLARE_FINAL_TYPE(FlTestTexture, |
| fl_test_texture, |
| FL, |
| TEST_TEXTURE, |
| FlTextureGL) |
| |
| /// A simple texture. |
| struct _FlTestTexture { |
| FlTextureGL parent_instance; |
| }; |
| |
| G_DEFINE_TYPE(FlTestTexture, fl_test_texture, fl_texture_gl_get_type()) |
| |
| static gboolean fl_test_texture_populate(FlTextureGL* texture, |
| uint32_t* target, |
| uint32_t* name, |
| uint32_t* width, |
| uint32_t* height, |
| GError** error) { |
| EXPECT_TRUE(FL_IS_TEST_TEXTURE(texture)); |
| |
| EXPECT_EQ(*width, kBufferWidth); |
| EXPECT_EQ(*height, kBufferHeight); |
| *target = GL_TEXTURE_2D; |
| *name = 1; |
| *width = kRealBufferWidth; |
| *height = kRealBufferHeight; |
| |
| return TRUE; |
| } |
| |
| static void fl_test_texture_class_init(FlTestTextureClass* klass) { |
| FL_TEXTURE_GL_CLASS(klass)->populate = fl_test_texture_populate; |
| } |
| |
| static void fl_test_texture_init(FlTestTexture* self) {} |
| |
| static FlTestTexture* fl_test_texture_new() { |
| return FL_TEST_TEXTURE(g_object_new(fl_test_texture_get_type(), nullptr)); |
| } |
| |
| // Test that getting the texture ID works. |
| TEST(FlTextureGLTest, TextureID) { |
| g_autoptr(FlTexture) texture = FL_TEXTURE(fl_test_texture_new()); |
| fl_texture_set_id(texture, 42); |
| EXPECT_EQ(fl_texture_get_id(texture), static_cast<int64_t>(42)); |
| } |
| |
| // Test that populating an OpenGL texture works. |
| TEST(FlTextureGLTest, PopulateTexture) { |
| g_autoptr(FlTextureGL) texture = FL_TEXTURE_GL(fl_test_texture_new()); |
| FlutterOpenGLTexture opengl_texture = {0}; |
| g_autoptr(GError) error = nullptr; |
| EXPECT_TRUE(fl_texture_gl_populate(texture, kBufferWidth, kBufferHeight, |
| &opengl_texture, &error)); |
| EXPECT_EQ(error, nullptr); |
| EXPECT_EQ(opengl_texture.width, kRealBufferWidth); |
| EXPECT_EQ(opengl_texture.height, kRealBufferHeight); |
| } |