From 816210ab8d8ba78361d681a4b7b0208dbf5452b4 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Fri, 29 Jul 2016 16:35:33 +0100 Subject: [PATCH] Renderer Depth UTCs + test-gl-abstraction update Change-Id: I72af9d9c39114f150934038b579500ebca47f4e0 --- .../dali-test-suite-utils/test-gl-abstraction.cpp | 3 + .../dali-test-suite-utils/test-gl-abstraction.h | 18 ++- automated-tests/src/dali/utc-Dali-Renderer.cpp | 144 +++++++++++++++++++-- 3 files changed, 147 insertions(+), 18 deletions(-) diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp index d42a548..6e9b9f0 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp +++ b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp @@ -70,6 +70,7 @@ void TestGlAbstraction::Initialize() mLastShaderIdUsed = 0; mLastProgramIdUsed = 0; mLastUniformIdUsed = 0; + mLastDepthMask = false; mUniforms.clear(); mProgramUniforms1i.clear(); @@ -79,8 +80,10 @@ void TestGlAbstraction::Initialize() mProgramUniforms4f.clear(); mCullFaceTrace.Reset(); + mDepthFunctionTrace.Reset(); mEnableDisableTrace.Reset(); mShaderTrace.Reset(); + mStencilFunctionTrace.Reset(); mTextureTrace.Reset(); mTexParamaterTrace.Reset(); mDrawTrace.Reset(); diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h index 1f55977..10c3264 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h +++ b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h @@ -1,8 +1,8 @@ -#ifndef __TEST_GL_ABSTRACTION_H__ -#define __TEST_GL_ABSTRACTION_H__ +#ifndef TEST_GL_ABSTRACTION_H +#define TEST_GL_ABSTRACTION_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -468,6 +468,12 @@ public: inline void DepthMask(GLboolean flag) { + mLastDepthMask = flag; + } + + inline bool GetLastDepthMask() const + { + return mLastDepthMask; } inline void DepthRangef(GLclampf zNear, GLclampf zFar) @@ -2059,6 +2065,8 @@ private: GLenum mLastBlendFuncSrcAlpha; GLenum mLastBlendFuncDstAlpha; + GLboolean mLastDepthMask; + // Data for manipulating the IDs returned by GenTextures GLuint mLastAutoTextureIdUsed; std::vector mNextTextureIds; @@ -2258,6 +2266,4 @@ bool BlendEnabled(const Dali::TraceCallStack& callStack); bool BlendDisabled(const Dali::TraceCallStack& callStack); - - -#endif // __TEST_GL_ES_H__ +#endif // TEST_GL_ABSTRACTION_H diff --git a/automated-tests/src/dali/utc-Dali-Renderer.cpp b/automated-tests/src/dali/utc-Dali-Renderer.cpp index a812941..aecffc8 100644 --- a/automated-tests/src/dali/utc-Dali-Renderer.cpp +++ b/automated-tests/src/dali/utc-Dali-Renderer.cpp @@ -36,8 +36,8 @@ const BlendFactor::Type DEFAULT_BLEND_FACTOR_DEST_RGB( BlendFactor::ONE_MINU const BlendFactor::Type DEFAULT_BLEND_FACTOR_SRC_ALPHA( BlendFactor::ONE ); const BlendFactor::Type DEFAULT_BLEND_FACTOR_DEST_ALPHA( BlendFactor::ONE_MINUS_SRC_ALPHA ); -const BlendEquation::Type DEFAULT_BLEND_EQUATION_RGB( BlendEquation::ADD ); -const BlendEquation::Type DEFAULT_BLEND_EQUATION_ALPHA( BlendEquation::ADD ); +const BlendEquation::Type DEFAULT_BLEND_EQUATION_RGB( BlendEquation::ADD ); +const BlendEquation::Type DEFAULT_BLEND_EQUATION_ALPHA( BlendEquation::ADD ); /** * @brief Get GL stencil test enumeration value as a string. @@ -50,6 +50,17 @@ std::string GetStencilTestString(void) return stream.str(); } +/** + * @brief Get GL depth test enumeration value as a string. + * @return The string representation of the value of GL_DEPTH_TEST + */ +std::string GetDepthTestString(void) +{ + std::stringstream stream; + stream << GL_DEPTH_TEST; + return stream.str(); +} + void ResetDebugAndFlush( TestApplication& application, TraceCallStack& glEnableDisableStack, TraceCallStack& glStencilFunctionStack ) { glEnableDisableStack.Reset(); @@ -1047,8 +1058,6 @@ int UtcDaliRendererConstraint02(void) END_TEST; } - - int UtcDaliRendererAnimatedProperty01(void) { TestApplication application; @@ -1391,7 +1400,6 @@ int UtcDaliRendererUniformMapMultipleUniforms02(void) END_TEST; } - int UtcDaliRendererRenderOrder2DLayer(void) { TestApplication application; @@ -2037,7 +2045,7 @@ int UtcDaliRendererSetDepthFunction(void) END_TEST; } -Renderer StencilTestFixture( TestApplication& application ) +Renderer RendererTestFixture( TestApplication& application ) { Geometry geometry = CreateQuadGeometry(); Shader shader = CreateShader(); @@ -2053,12 +2061,124 @@ Renderer StencilTestFixture( TestApplication& application ) return renderer; } +int UtcDaliRendererSetDepthTestMode(void) +{ + TestApplication application; + tet_infoline("Test setting the DepthTestMode"); + + Renderer renderer = RendererTestFixture( application ); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + glAbstraction.EnableEnableDisableCallTrace( true ); + TraceCallStack& glEnableDisableStack = glAbstraction.GetEnableDisableTrace(); + + glEnableDisableStack.Reset(); + application.SendNotification(); + application.Render(); + + // Check depth-test is enabled by default. + DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Enable", GetDepthTestString() ) ); + DALI_TEST_CHECK( !glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); + + // Turn off depth-testing. We want to check if the depth buffer has been disabled, so we need to turn off depth-write as well for this case. + renderer.SetProperty( Renderer::Property::DEPTH_TEST_MODE, DepthTestMode::OFF ); + renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::OFF ); + + glEnableDisableStack.Reset(); + application.SendNotification(); + application.Render(); + + // Check the depth buffer was disabled. + DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); + + // Turn on automatic mode depth-testing. + // Layer behavior is currently set to LAYER_3D so AUTO should enable depth-testing. + renderer.SetProperty( Renderer::Property::DEPTH_TEST_MODE, DepthTestMode::AUTO ); + + glEnableDisableStack.Reset(); + application.SendNotification(); + application.Render(); + + // Check depth-test is now enabled. + DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Enable", GetDepthTestString() ) ); + DALI_TEST_CHECK( !glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); + + // Change the layer behavior to LAYER_2D. + // Note this will also disable depth testing for the layer by default, we test this first. + Stage::GetCurrent().GetRootLayer().SetBehavior( Layer::LAYER_2D ); + + glEnableDisableStack.Reset(); + application.SendNotification(); + application.Render(); + + // Check depth-test is disabled. + DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); + + // Turn the layer depth-test flag back on, and confirm that depth testing is *still* off. + // This is because our renderer has DepthTestMode::AUTO and our layer behavior is LAYER_2D. + Stage::GetCurrent().GetRootLayer().SetDepthTestDisabled( false ); + + glEnableDisableStack.Reset(); + application.SendNotification(); + application.Render(); + + // Check depth-test is *still* disabled. + DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); + + END_TEST; +} + +int UtcDaliRendererSetDepthWriteMode(void) +{ + TestApplication application; + tet_infoline("Test setting the DepthWriteMode"); + + Renderer renderer = RendererTestFixture( application ); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + + application.SendNotification(); + application.Render(); + + // Check the default depth-write status first. + DALI_TEST_CHECK( glAbstraction.GetLastDepthMask() ); + + // Turn off depth-writing. + renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::OFF ); + + application.SendNotification(); + application.Render(); + + // Check depth-write is now disabled. + DALI_TEST_CHECK( !glAbstraction.GetLastDepthMask() ); + + // Test the AUTO mode for depth-writing. + // As our renderer is opaque, depth-testing should be enabled. + renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::AUTO ); + + application.SendNotification(); + application.Render(); + + // Check depth-write is now enabled. + DALI_TEST_CHECK( glAbstraction.GetLastDepthMask() ); + + // Now make the renderer be treated as translucent by enabling blending. + // The AUTO depth-write mode should turn depth-write off in this scenario. + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); + + application.SendNotification(); + application.Render(); + + // Check depth-write is now disabled. + DALI_TEST_CHECK( !glAbstraction.GetLastDepthMask() ); + + END_TEST; +} + int UtcDaliRendererCheckStencilDefaults(void) { TestApplication application; tet_infoline("Test the stencil defaults"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableEnableDisableCallTrace( true ); glAbstraction.EnableStencilFunctionCallTrace( true ); @@ -2084,7 +2204,7 @@ int UtcDaliRendererSetStencilMode(void) TestApplication application; tet_infoline("Test setting the StencilMode"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableEnableDisableCallTrace( true ); glAbstraction.EnableStencilFunctionCallTrace( true ); @@ -2117,7 +2237,7 @@ int UtcDaliRendererSetStencilFunction(void) TestApplication application; tet_infoline("Test setting the StencilFunction"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableEnableDisableCallTrace( true ); glAbstraction.EnableStencilFunctionCallTrace( true ); @@ -2207,7 +2327,7 @@ int UtcDaliRendererSetStencilOperation(void) TestApplication application; tet_infoline("Test setting the StencilOperation"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableEnableDisableCallTrace( true ); glAbstraction.EnableStencilFunctionCallTrace( true ); @@ -2294,7 +2414,7 @@ int UtcDaliRendererSetStencilMask(void) TestApplication application; tet_infoline("Test setting the StencilMask"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); glAbstraction.EnableEnableDisableCallTrace( true ); glAbstraction.EnableStencilFunctionCallTrace( true ); @@ -2339,7 +2459,7 @@ int UtcDaliRendererSetWriteToColorBuffer(void) TestApplication application; tet_infoline("Test setting the WriteToColorBuffer flag"); - Renderer renderer = StencilTestFixture( application ); + Renderer renderer = RendererTestFixture( application ); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); // Set the StencilMask property to a value. -- 2.7.4