[3.0] Renderer Depth UTCs + test-gl-abstraction update 94/84894/1
authorTom Robinson <tom.robinson@samsung.com>
Fri, 29 Jul 2016 15:35:33 +0000 (16:35 +0100)
committerAgnelo Vaz <agnelo.vaz@samsung.com>
Mon, 22 Aug 2016 10:41:15 +0000 (11:41 +0100)
Change-Id: I72af9d9c39114f150934038b579500ebca47f4e0

automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp
automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h
automated-tests/src/dali/utc-Dali-Renderer.cpp

index d42a548..6e9b9f0 100644 (file)
@@ -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();
index 1f55977..10c3264 100644 (file)
@@ -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<GLuint> 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
index a812941..aecffc8 100644 (file)
@@ -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.