blob: 275d0cd64eb81ffbecd31d54f9bb33bbd09cd2f6 [file] [log] [blame]
// 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);
}