2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "test-actor-utils.h"
22 #include <dali/public-api/dali-core.h>
25 #include <dali-test-suite-utils.h>
26 #include "mesh-builder.h"
32 const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
33 attribute mediump vec2 aPosition;\n
34 uniform mediump mat4 uMvpMatrix;\n
35 uniform mediump vec3 uSize;\n
38 mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);
40 vertexPosition.xyz *= uSize;
42 gl_Position = uMvpMatrix * vertexPosition;
46 const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
47 uniform lowp vec4 uColor;\n
50 gl_FragColor = uColor;
54 } // unnamed namespace
56 Actor CreateRenderableActor()
58 return CreateRenderableActor(Texture(), VERTEX_SHADER, FRAGMENT_SHADER);
61 Actor CreateRenderableActor(Texture texture)
63 return CreateRenderableActor(texture, VERTEX_SHADER, FRAGMENT_SHADER);
66 Actor CreateRenderableActor(Texture texture, const std::string& vertexShader, const std::string& fragmentShader)
68 // Create the geometry
69 Geometry geometry = CreateQuadGeometry();
72 Shader shader = Shader::New(vertexShader, fragmentShader);
74 // Create renderer from geometry and material
75 Renderer renderer = Renderer::New(geometry, shader);
77 // Create actor and set renderer
78 Actor actor = Actor::New();
79 actor.AddRenderer(renderer);
81 // If we a texture, then create a texture-set and add to renderer
84 TextureSet textureSet = TextureSet::New();
85 textureSet.SetTexture(0u, texture);
86 renderer.SetTextures(textureSet);
88 // Set actor to the size of the texture if set
89 actor.SetProperty(Actor::Property::SIZE, Vector2(texture.GetWidth(), texture.GetHeight()));
95 Actor CreateRenderableActor2(TextureSet textures, const std::string& vertexShader, const std::string& fragmentShader)
97 // Create the geometry
98 Geometry geometry = CreateQuadGeometry();
101 Shader shader = Shader::New(vertexShader, fragmentShader);
103 // Create renderer from geometry and material
104 Renderer renderer = Renderer::New(geometry, shader);
106 // Create actor and set renderer
107 Actor actor = Actor::New();
108 actor.AddRenderer(renderer);
110 // If we a texture, then create a texture-set and add to renderer
113 renderer.SetTextures(textures);
115 auto texture = textures.GetTexture(0);
117 // Set actor to the size of the texture if set
118 actor.SetProperty(Actor::Property::SIZE, Vector2(texture.GetWidth(), texture.GetHeight()));
124 Texture CreateTexture(TextureType::Type type, Pixel::Format format, int width, int height)
126 Texture texture = Texture::New(type, format, width, height);
128 int bufferSize = width * height * GetBytesPerPixel(format);
129 uint8_t* buffer = reinterpret_cast<uint8_t*>(malloc(bufferSize));
130 PixelData pixelData = PixelData::New(buffer, bufferSize, width, height, format, PixelData::FREE);
131 texture.Upload(pixelData, 0u, 0u, 0u, 0u, width, height);
135 TextureSet CreateTextureSet(Pixel::Format format, int width, int height)
137 TextureSet textureSet = TextureSet::New();
138 textureSet.SetTexture(0u, CreateTexture(TextureType::TEXTURE_2D, format, width, height));
142 void DirtyRectChecker(const std::vector<Rect<int>>& damagedRects, std::multiset<Rect<int>, RectSorter> expectedRectList, bool checkRectsExact, const char* testLocation)
144 // Just check damagedRect contain all expectRectList.
145 DALI_TEST_GREATER(damagedRects.size() + 1u, expectedRectList.size(), testLocation);
147 for(auto& rect : damagedRects)
149 auto iter = expectedRectList.find(rect);
150 if(iter != expectedRectList.end())
152 expectedRectList.erase(iter);
154 else if(checkRectsExact)
156 std::ostringstream o;
157 o << rect << " exist in expectRectList" << std::endl;
158 fprintf(stderr, "Test failed in %s, checking %s", testLocation, o.str().c_str());
159 tet_result(TET_FAIL);
163 // Check all rects are matched
164 DALI_TEST_EQUALS(expectedRectList.empty(), true, testLocation);