"This is a custom fragment shader\n"
"made on purpose to look nothing like a normal fragment shader inside dali\n";
-static const char* FragmentSourceUsingExtensions =
-"This is a custom fragment shader using extensions\n"
-"made on purpose to look nothing like a normal fragment shader inside dali\n";
-
const int GETSOURCE_BUFFER_SIZE = 0x10000;
{
}
- Vector3 operator()(const Vector3& current)
+ void operator()( Vector3& current, const PropertyInputContainer& /* inputs */ )
{
- return mTarget;
+ current = mTarget;
}
Vector3 mTarget;
{
}
- Vector3 operator()(const Vector3& current, const PropertyInput& position)
+ void operator()( Vector3& current, const PropertyInputContainer& inputs )
{
-
- return position.GetVector3();
+ current = inputs[0]->GetVector3();
}
};
{
}
- Vector3 operator()(const Vector3& current)
+ void operator()( Vector3& current, const PropertyInputContainer& /* inputs */ )
{
- return mTarget * 2.0f;
+ current = mTarget * 2.0f;
}
Vector3 mTarget;
};
-class ShaderEffectExtension : public ShaderEffect::Extension {};
-
+static const char* TestImageFilename = "icon_wrt.png";
-class TestExtension : public ShaderEffect::Extension
+Integration::Bitmap* CreateBitmap( unsigned int imageHeight, unsigned int imageWidth, unsigned int initialColor )
{
-public:
- TestExtension( bool& deleted )
- : mDeleted(deleted)
- {
- mDeleted = false;
- }
- ~TestExtension()
- {
- mDeleted = true;
- }
- bool IsAlive() const
- {
- return !mDeleted;
- }
-private:
- bool& mDeleted;
-};
+ Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::RETAIN );
+ Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, imageWidth,imageHeight,imageWidth,imageHeight );
+ unsigned int bytesPerPixel = GetBytesPerPixel( Pixel::RGBA8888 );
+
+ memset( pixbuffer, initialColor , imageHeight*imageWidth*bytesPerPixel);
+
+ return bitmap;
+}
} // anon namespace
catch (Dali::DaliException& e)
{
// Tests that a negative test of an assertion succeeds
- tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
+ DALI_TEST_PRINT_ASSERT( e );
DALI_TEST_CHECK( !effect );
}
END_TEST;
}
-int UtcDaliShaderEffectMethodNew03(void)
-{
- TestApplication application;
-
- ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource, VertexSource, FragmentSource, ShaderEffect::HINT_NONE );
- DALI_TEST_CHECK(effect);
- END_TEST;
-}
-
-int UtcDaliShaderEffectMethodNew04(void)
-{
- TestApplication application;
- tet_infoline("Testing prefixed version of Dali::ShaderEffect::New()");
-
- std::string fragmentShaderPrefix = "#define TEST_FS 1\n#extension GL_OES_standard_derivatives : enable";
- std::string vertexShaderPrefix = "#define TEST_VS 1";
-
- try
- {
- // Call render to compile default shaders.
- application.SendNotification();
- application.Render();
- application.Render();
- application.Render();
-
- GLuint lastShaderCompiledBefore = application.GetGlAbstraction().GetLastShaderCompiled();
- ShaderEffect effect = ShaderEffect::NewWithPrefix( vertexShaderPrefix, VertexSource,
- fragmentShaderPrefix, FragmentSourceUsingExtensions,
- GEOMETRY_TYPE_IMAGE, ShaderEffect::HINT_NONE );
-
- BitmapImage image = CreateBitmapImage();
- ImageActor actor = ImageActor::New( image );
- actor.SetSize( 100.0f, 100.0f );
- actor.SetName("TestImageFilenameActor");
- actor.SetShaderEffect(effect);
- Stage::GetCurrent().Add(actor);
-
- application.SendNotification();
- application.Render();
- GLuint lastShaderCompiledAfter = application.GetGlAbstraction().GetLastShaderCompiled();
- bool testResult = false;
-
- // we should have compiled 2 shaders.
- DALI_TEST_EQUALS( lastShaderCompiledAfter, lastShaderCompiledBefore + 2, TEST_LOCATION );
-
- char testVertexSourceResult[GETSOURCE_BUFFER_SIZE];
- char testFragmentSourceResult[GETSOURCE_BUFFER_SIZE];
-
- // we are interested in the first two.
- GLuint vertexShaderId = lastShaderCompiledBefore + 1;
- GLuint fragmentShaderId = lastShaderCompiledBefore + 2;
-
- GLsizei lengthVertexResult;
- GLsizei lengthFragmentResult;
-
- application.GetGlAbstraction().GetShaderSource(vertexShaderId, GETSOURCE_BUFFER_SIZE, &lengthVertexResult, testVertexSourceResult);
- application.GetGlAbstraction().GetShaderSource(fragmentShaderId, GETSOURCE_BUFFER_SIZE, &lengthFragmentResult, testFragmentSourceResult);
-
- int vertexShaderHasPrefix = strncmp(testVertexSourceResult, "#define ", strlen("#define "));
- int fragmentShaderHasPrefix = strncmp(testFragmentSourceResult, "#define ", strlen("#define "));
- testResult = (vertexShaderHasPrefix == 0) && (fragmentShaderHasPrefix == 0);
-
- DALI_TEST_CHECK(testResult);
- }
- catch(Dali::DaliException& e)
- {
- tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
- tet_result( TET_FAIL );
- }
- END_TEST;
-}
-
int UtcDaliShaderEffectMethodNew05(void)
{
TestApplication application;
// heap constructor / destructor
DefaultFunctionCoverage<ShaderEffect> shaderEffect;
- DefaultFunctionCoverage<ShaderEffectExtension> shaderEffectExtension;
-
- END_TEST;
-}
-
-int UtcDaliShaderEffectMethodNew06(void)
-{
- TestApplication application;
- tet_infoline("Testing Dali::ShaderEffect::New() with shader sources for different geometry types");
- ShaderEffect effect = ShaderEffect::New( "imageVertexShader", "imageFragmentShader",
- "textVertexShader", "textFragmentShader",
- "texturedMeshVertexShader", "texturedMeshFragmentShader",
- "meshVertexShader", "meshFragmentShader",
- ShaderEffect::HINT_NONE );
- DALI_TEST_CHECK(effect);
END_TEST;
}
-
int UtcDaliShaderEffectMethodDownCast(void)
{
TestApplication application;
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uFloat", 1.0f );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec2", Vector2( 2.0f, 3.0f ) );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 4.0f, 5.0f, 6.0f ) );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec4", Vector4( 7.0f, 8.0f, 9.0f, 10.0f ) );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uModelView", Matrix::IDENTITY );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
Matrix3 matIdentity(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
effect.SetUniform( "uMatrix3", matIdentity );
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
ImageActor actor = ImageActor::New( image );
actor.SetSize( 100.0f, 100.0f );
const Vector2& stageSize(Stage::GetCurrent().GetSize());
- DALI_TEST_CHECK(
- application.GetGlAbstraction().CheckUniformValue(
- "uVec2", Vector2( stageSize.x/2, -stageSize.y/2 ) ) );
+ DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uVec2", Vector2( stageSize.x/2, -stageSize.y/2 ) ) );
+
+ DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uVec2Dir", Vector2( -1.0f, 2.0f ) ) );
+
+ // change coordinate types
+ effect.SetUniform( "uVec2", Vector2( 0.1f, 0.2f ), ShaderEffect::COORDINATE_TYPE_DEFAULT );
+ effect.SetUniform( "uVec2Dir", Vector2( 1.0f, 2.0f ), ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
+ actor.SetPixelArea( ImageActor::PixelArea( 0, 0, 10, 10 ) );
+
+ application.SendNotification();
+ application.Render();
+
+ Vector2 outValue;
+ application.GetGlAbstraction().GetUniformValue( "uVec2", outValue );
+ DALI_TEST_EQUALS( outValue, Vector2( 0.1f, 0.2f ), TEST_LOCATION );
+
+ application.GetGlAbstraction().GetUniformValue( "uVec2Dir", outValue );
+ DALI_TEST_EQUALS( outValue, Vector2( stageSize.x *.5f - 1.f, -stageSize.y * .5f + 2.f), TEST_LOCATION );
- DALI_TEST_CHECK(
- application.GetGlAbstraction().CheckUniformValue(
- "uVec2Dir", Vector2( -1.0f, 2.0f ) ) );
END_TEST;
}
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetEffectImage(image);
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
- BitmapImage effectImage = CreateBitmapImage();
+ BufferImage effectImage = CreateBufferImage();
effect.SetEffectImage(effectImage);
ImageActor actor = ImageActor::New();
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
application.GetGlAbstraction().CheckUniformValue(
"uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
- Constraint constraint = Constraint::New<Vector3>( uVecProperty,
- TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
-
- effect.ApplyConstraint(constraint);
+ Constraint constraint = Constraint::New<Vector3>( effect, uVecProperty, TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ constraint.Apply();
application.SendNotification();
application.Render();
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 50.0f, 25.0f, 0.0f ) );
Property::Index uVecProperty = effect.GetPropertyIndex("uVec3");
- Constraint constraint = Constraint::New<Vector3>( uVecProperty,
- Source(actor, Actor::POSITION),
- TestConstraintFromPositionToVector3() );
-
- effect.ApplyConstraint(constraint);
+ Constraint constraint = Constraint::New<Vector3>( effect, uVecProperty, TestConstraintFromPositionToVector3() );
+ constraint.AddSource( Source( actor, Actor::Property::POSITION ) );
+ constraint.Apply();
application.SendNotification();
application.Render();
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 50.0f, 25.0f, 0.0f ) );
Property::Index uVecProperty = effect.GetPropertyIndex("uVec3");
- Constraint shaderConstraint = Constraint::New<Vector3>( uVecProperty,
- Source(actor, Actor::POSITION),
- TestConstraintFromPositionToVector3() );
-
- effect.ApplyConstraint(shaderConstraint);
-
- Constraint actorConstraint = Constraint::New<Vector3>( Actor::POSITION,
- TestConstraintToVector3Double(targetPosition) );
+ Constraint shaderConstraint = Constraint::New<Vector3>( effect, uVecProperty, TestConstraintFromPositionToVector3() );
+ shaderConstraint.AddSource( Source(actor, Actor::Property::POSITION) );
+ shaderConstraint.Apply();
- actor.ApplyConstraint(actorConstraint);
+ Constraint actorConstraint = Constraint::New<Vector3>( actor, Actor::Property::POSITION, TestConstraintToVector3Double(targetPosition) );
+ actorConstraint.Apply();
application.SendNotification();
application.Render();
END_TEST;
}
-int UtcDaliShaderEffectMethodApplyConstraintCallback(void)
+int UtcDaliShaderEffectMethodRemoveConstraints(void)
{
- // Test whether Shader's uniform can be constrained to a stationary constraint.
+ // Test if constrains can be removed before they are ever applyed.
TestApplication application;
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
application.GetGlAbstraction().CheckUniformValue(
"uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
- Constraint constraint = Constraint::New<Vector3>( uVecProperty,
- TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ Constraint constraint = Constraint::New<Vector3>( effect, uVecProperty, TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ constraint.Apply();
- constraint.SetApplyTime( 10.0f );
-
- bool constraintCheck( false );
- ConstraintAppliedCheck appliedCheck( constraintCheck );
-
- // We should receive the "Applied" signal after 10 seconds
- ActiveConstraint active = effect.ApplyConstraint(constraint);
- active.AppliedSignal().Connect( &application, appliedCheck );
-
- application.SendNotification();
- application.Render(static_cast<unsigned int>(1000.0f)); // 1 elapsed second
-
- // Check signal has not fired
- application.SendNotification();
- appliedCheck.CheckSignalNotReceived();
-
- application.Render(static_cast<unsigned int>(4000.0f)); // 5 elapsed seconds
-
- // Check signal has not fired
- application.SendNotification();
- appliedCheck.CheckSignalNotReceived();
-
- application.Render(static_cast<unsigned int>(5000.0f - 1.0f)); // <10 elapsed seconds
-
- // Check signal has not fired
- application.SendNotification();
- appliedCheck.CheckSignalNotReceived();
-
- application.Render(static_cast<unsigned int>(2.0f)); // >10 elapsed seconds
+ // Remove the constraints
+ effect.RemoveConstraints();
- // Signal should have fired
application.SendNotification();
- appliedCheck.CheckSignalReceived();
+ application.Render();
// Test effects of Constraint.
DALI_TEST_CHECK(
application.GetGlAbstraction().CheckUniformValue(
- "uVec3", Vector3( 4.0f, 9.0f, 16.0f ) ) );
+ "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
END_TEST;
}
-int UtcDaliShaderEffectMethodRemoveConstraints(void)
+int UtcDaliShaderEffectMethodRemoveConstraints2(void)
{
- // Test if constrains can be removed before they are ever applyed.
+ // Test whether Shader's uniform constrains can be removed after they are applyed.
TestApplication application;
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ BufferImage image = CreateBufferImage();
effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
application.GetGlAbstraction().CheckUniformValue(
"uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
- Constraint constraint = Constraint::New<Vector3>( uVecProperty,
- TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ Constraint constraint = Constraint::New<Vector3>( effect, uVecProperty, TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ constraint.Apply();
- effect.ApplyConstraint(constraint);
+ application.SendNotification();
+ application.Render();
- // Remove the constraints
+ // Reset the value and remove the constraints
+ effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
effect.RemoveConstraints();
application.SendNotification();
END_TEST;
}
-int UtcDaliShaderEffectMethodRemoveConstraints2(void)
+int UtcDaliShaderEffectPropertyIndices(void)
{
- // Test whether Shader's uniform constrains can be removed after they are applyed.
TestApplication application;
-
ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
- DALI_TEST_CHECK( effect );
- BitmapImage image = CreateBitmapImage();
+ Property::IndexContainer indices;
+ effect.GetPropertyIndices( indices );
+ DALI_TEST_CHECK( indices.Size() );
+ DALI_TEST_EQUALS( indices.Size(), effect.GetPropertyCount(), TEST_LOCATION );
+ END_TEST;
+}
+
+int UtcDaliShaderBinaries(void)
+{
+ TestApplication application;
+ // these will not affect the "first round" of dali render as core is already initialized and it has queried the defaults
+ application.GetGlAbstraction().SetBinaryFormats( 1 );
+ application.GetGlAbstraction().SetNumBinaryFormats( 1 );
+ application.GetGlAbstraction().SetProgramBinaryLength( 1 );
- effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
+ GLuint lastShaderCompiledBefore = application.GetGlAbstraction().GetLastShaderCompiled();
+ ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
+ DALI_TEST_CHECK( effect );
+
+ BufferImage image = CreateBufferImage();
ImageActor actor = ImageActor::New( image );
actor.SetSize( 100.0f, 100.0f );
actor.SetName("TestImageFilenameActor");
actor.SetShaderEffect(effect);
Stage::GetCurrent().Add(actor);
- Property::Index uVecProperty = effect.GetPropertyIndex("uVec3");
-
application.SendNotification();
- application.Render();
+ application.Render(16);
+ // binary was not requested by DALi
+ DALI_TEST_CHECK( !(application.GetGlAbstraction().GetProgramBinaryCalled()) );
- // Test effects of SetUniform...
- DALI_TEST_CHECK(
- application.GetGlAbstraction().CheckUniformValue(
- "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
+ GLuint lastShaderCompiledAfter = application.GetGlAbstraction().GetLastShaderCompiled();
- Constraint constraint = Constraint::New<Vector3>( uVecProperty,
- TestConstraintToVector3(Vector3(4.0f, 9.0f, 16.0f)) );
+ // check that the shader was compiled
+ DALI_TEST_EQUALS( lastShaderCompiledAfter, lastShaderCompiledBefore + 2, TEST_LOCATION );
- effect.ApplyConstraint(constraint);
+ // simulate context loss to get core to re-initialize its GL
+ application.GetCore().ContextDestroyed();
+ application.GetCore().ContextCreated();
application.SendNotification();
- application.Render();
+ application.Render(16);
- // Reset the value and remove the constraints
- effect.SetUniform( "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) );
- effect.RemoveConstraints();
+ // shader is recompiled
+ GLuint finalShaderCompiled = application.GetGlAbstraction().GetLastShaderCompiled();
+ // check that the shader was compiled
+ DALI_TEST_EQUALS( lastShaderCompiledAfter + 2, finalShaderCompiled, TEST_LOCATION );
- application.SendNotification();
- application.Render();
+ // binary was requested by DALi
+ DALI_TEST_CHECK( application.GetGlAbstraction().GetProgramBinaryCalled() );
- // Test effects of Constraint.
- DALI_TEST_CHECK(
- application.GetGlAbstraction().CheckUniformValue(
- "uVec3", Vector3( 1.0f, 2.0f, 3.0f ) ) );
END_TEST;
}
-int UtcDaliShaderEffectMethodCreateExtension(void)
+int UtcDaliShaderEffectFromProperties01(void)
{
- // Test creation of a shader extension
- TestApplication aplication;
+ TestApplication application;
+ tet_infoline("UtcDaliShaderEffectFromProperties01()");
- bool deleted;
- {
- ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
- DALI_TEST_CHECK( effect );
+ std::string fragmentShaderPrefix = "#define TEST_FS 1\n#extension GL_OES_standard_derivatives : enable";
+ std::string vertexShaderPrefix = "#define TEST_VS 1";
+ std::string vertexShader(VertexSource);
+ std::string fragmentShader(FragmentSource);
- TestExtension* extension = new TestExtension ( deleted );
+ // Call render to compile default shaders.
+ application.SendNotification();
+ application.Render();
- effect.AttachExtension( extension );
+ GLuint lastShaderCompiledBefore = application.GetGlAbstraction().GetLastShaderCompiled();
- DALI_TEST_CHECK( static_cast<TestExtension&>(effect.GetExtension()).IsAlive() );
- }
+ // create from type registry
- DALI_TEST_CHECK( deleted );
- END_TEST;
-}
+ TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ShaderEffect" );
+ DALI_TEST_CHECK( typeInfo );
+ ShaderEffect effect = ShaderEffect::DownCast( typeInfo.CreateInstance() );
+ DALI_TEST_CHECK( effect );
-int UtcDaliShaderEffectMethodCreateExtension2(void)
-{
- // Test creation of a shader extension
- bool deleted;
- {
- TestApplication application;
+ Property::Value programMap = Property::Value(Property::MAP);
- ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
- DALI_TEST_CHECK( effect );
+ programMap.SetValue("vertex", vertexShader);
+ programMap.SetValue("fragment", fragmentShader);
- BitmapImage image = CreateBitmapImage();
+ programMap.SetValue("vertex-prefix", vertexShaderPrefix);
+ programMap.SetValue("fragment-prefix", fragmentShaderPrefix);
- effect.SetUniform( "uFloat", 1.0f );
+ effect.SetProperty(effect.GetPropertyIndex("program"), programMap);
- ImageActor actor = ImageActor::New( image );
- actor.SetSize( 100.0f, 100.0f );
- actor.SetName("TestImageFilenameActor");
- actor.SetShaderEffect(effect);
- Stage::GetCurrent().Add(actor);
+ Property::Value imageMap = Property::Value(Property::MAP);
+ imageMap.SetValue("filename", Property::Value(TestImageFilename));
+ effect.SetProperty(effect.GetPropertyIndex("image"), imageMap);
- application.SendNotification();
- application.Render();
+ // do a update & render to get the image request
+ application.SendNotification();
+ application.Render();
- TestExtension* extension = new TestExtension ( deleted );
+ Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
+ // create the image
+ Integration::Bitmap* bitmap = CreateBitmap( 10, 10, 0xFF );
+ Integration::ResourcePointer resourcePtr(bitmap);
+ TestPlatformAbstraction& platform = application.GetPlatform();
+ platform.SetResourceLoaded(request->GetId(), request->GetType()->id, resourcePtr);
- effect.AttachExtension( extension );
+ BufferImage image(CreateBufferImage());
+ ImageActor actor = ImageActor::New( image );
+ actor.SetSize( 100.0f, 100.0f );
+ actor.SetName("TestImageFilenameActor");
+ actor.SetShaderEffect(effect);
+ Stage::GetCurrent().Add(actor);
- const ShaderEffect& constEffect(effect);
- const TestExtension& ext( static_cast<const TestExtension&>(constEffect.GetExtension()) );
+ application.SendNotification();
+ application.Render();
+ GLuint lastShaderCompiledAfter = application.GetGlAbstraction().GetLastShaderCompiled();
- DALI_TEST_CHECK( ext.IsAlive() );
- }
+ // we should have compiled 2 shaders.
+ DALI_TEST_EQUALS(lastShaderCompiledAfter, lastShaderCompiledBefore + 2, TEST_LOCATION );
+
+ std::string actualVertexShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 1 );
+ DALI_TEST_EQUALS( vertexShaderPrefix, actualVertexShader.substr( 0, vertexShaderPrefix.length() ), TEST_LOCATION );
+ DALI_TEST_EQUALS( vertexShader, actualVertexShader.substr( actualVertexShader.length() - vertexShader.length() ), TEST_LOCATION );
+
+ std::string actualFragmentShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 2 );
+ DALI_TEST_EQUALS( fragmentShaderPrefix, actualFragmentShader.substr( 0, fragmentShaderPrefix.length() ), TEST_LOCATION );
+ DALI_TEST_EQUALS( fragmentShader, actualFragmentShader.substr( actualFragmentShader.length() - fragmentShader.length() ), TEST_LOCATION );
- DALI_TEST_CHECK( deleted );
END_TEST;
}
-int UtcDaliShaderEffectMethodNoExtension(void)
+int UtcDaliShaderEffectFromProperties02(void)
{
TestApplication application;
+ tet_infoline("UtcDaliShaderEffectFromProperties02()");
- ShaderEffect effect;
+ // Call render to compile default shaders.
+ application.SendNotification();
+ application.Render();
+ application.Render();
+ application.Render();
- try
- {
- ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
+ // create from type registry (currently only way to get ShaderEffect with no shader setup in constructor
+ TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ShaderEffect" );
+ DALI_TEST_CHECK( typeInfo );
+ ShaderEffect effect = ShaderEffect::DownCast( typeInfo.CreateInstance() );
DALI_TEST_CHECK( effect );
- // Don't attach extension
- ShaderEffect::Extension& extension = effect.GetExtension();
- (void) extension;
+ Property::Value programMap = Property::Value(Property::MAP);
+
+ programMap.SetValue("vertex", std::string(VertexSource));
+ programMap.SetValue("fragment", std::string(FragmentSource));
+
+ effect.SetProperty(effect.GetPropertyIndex("program"), programMap);
- DALI_TEST_CHECK( false );
- }
- catch (Dali::DaliException& e)
- {
- // Tests that a negative test of an assertion succeeds
- tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
- DALI_TEST_CHECK( !effect );
- }
END_TEST;
}
-
-int UtcDaliShaderEffectPropertyIndices(void)
+int UtcDaliShaderEffectFromProperties03(void)
{
- TestApplication application;
- ShaderEffect effect = ShaderEffect::New( VertexSource, FragmentSource );
+ try
+ {
+ TestApplication application;
+ tet_infoline("UtcDaliShaderEffectFromProperties03()");
- Property::IndexContainer indices;
- effect.GetPropertyIndices( indices );
- DALI_TEST_CHECK( ! indices.empty() );
- DALI_TEST_EQUALS( indices.size(), effect.GetPropertyCount(), TEST_LOCATION );
+ // Call render to compile default shaders.
+ application.SendNotification();
+ application.Render();
+ application.Render();
+ application.Render();
+
+ // create from type registry (currently only way to get ShaderEffect with no shader setup in constructor
+ TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ShaderEffect" );
+ DALI_TEST_CHECK( typeInfo );
+ ShaderEffect effect = ShaderEffect::DownCast( typeInfo.CreateInstance() );
+ DALI_TEST_CHECK( effect );
+
+ // dont set unknown
+ effect.SetProperty( effect.GetPropertyIndex("geometry-hints"), "HINT_2" );
+
+ tet_result( TET_FAIL );
+ }
+ catch(Dali::DaliException& e)
+ {
+ DALI_TEST_PRINT_ASSERT( e );
+ }
END_TEST;
}