Jelajahi Sumber

Right function for subtract blending. Removing multiply blending support.

myst6re 11 tahun lalu
induk
melakukan
0bb0589676

+ 0 - 6
QGearsMain/include/core/Background2D.h

@@ -128,12 +128,6 @@ private:
     unsigned int                          m_SubtractMaxVertexCount;
     Ogre::MaterialPtr                     m_SubtractMaterial;
 
-    // multiply blended
-    Ogre::RenderOperation                 m_MultiplyRenderOp;
-    Ogre::HardwareVertexBufferSharedPtr   m_MultiplyVertexBuffer;
-    unsigned int                          m_MultiplyMaxVertexCount;
-    Ogre::MaterialPtr                     m_MultiplyMaterial;
-
     Entity*                               m_ScrollEntity;
     Ogre::Vector2                         m_ScrollPositionStart;
     Ogre::Vector2                         m_ScrollPositionEnd;

+ 0 - 1
QGearsMain/include/map/QGearsBackground2DFileXMLSerializer.h

@@ -53,7 +53,6 @@ namespace QGears
         static const String BLENDING_ALPHA;
         static const String BLENDING_ADD;
         static const String BLENDING_SUBTRACT;
-        static const String BLENDING_MULTIPLY;
 
         template<typename ValueType> void
         readVector( TiXmlNode &node, const String &tag, std::vector<ValueType> &pDest )

+ 0 - 1
QGearsMain/include/map/QGearsTile.h

@@ -13,7 +13,6 @@ namespace QGears
         B_ALPHA
        ,B_ADD
        ,B_SUBTRACT
-       ,B_MULTIPLY
     };
 
     struct KeyFrame

+ 2 - 66
QGearsMain/src/core/Background2D.cpp

@@ -22,7 +22,6 @@ Background2D::Background2D():
     m_AlphaMaxVertexCount( 0 ),
     m_AddMaxVertexCount( 0 ),
     m_SubtractMaxVertexCount( 0 ),
-    m_MultiplyMaxVertexCount( 0 ),
 
     m_ScrollEntity( NULL ),
     m_ScrollPositionStart( Ogre::Vector2::ZERO ),
@@ -79,7 +78,8 @@ Background2D::Background2D():
     pass->setDepthCheckEnabled( true );
     pass->setDepthWriteEnabled( true );
     pass->setLightingEnabled( false );
-    pass->setSceneBlending( Ogre::SBF_ONE, Ogre::SBF_ONE_MINUS_SOURCE_COLOUR ); // FIXME: SUBTRACT
+    pass->setSceneBlending( Ogre::SBT_ADD );
+    pass->setSceneBlendingOperation( Ogre::SBO_SUBTRACT );
     pass->setAlphaRejectFunction( Ogre::CMPF_LESS );
     pass->setAlphaRejectValue( 0 );
     tex = pass->createTextureUnitState();
@@ -87,21 +87,6 @@ Background2D::Background2D():
     tex->setNumMipmaps( -1 );
     tex->setTextureFiltering( Ogre::TFO_NONE );
 
-    m_MultiplyMaterial = Ogre::MaterialManager::getSingleton().create( "Background2DMultiply", "General" );
-    pass = m_MultiplyMaterial->getTechnique( 0 )->getPass( 0 );
-    pass->setVertexColourTracking( Ogre::TVC_AMBIENT );
-    pass->setCullingMode( Ogre::CULL_NONE );
-    pass->setDepthCheckEnabled( true );
-    pass->setDepthWriteEnabled( true );
-    pass->setLightingEnabled( false );
-    pass->setSceneBlending( Ogre::SBT_ADD ); // FIXME: MULTIPLY
-    pass->setAlphaRejectFunction( Ogre::CMPF_GREATER );
-    pass->setAlphaRejectValue( 0 );
-    tex = pass->createTextureUnitState();
-    tex->setTextureName( "system/blank.png" );
-    tex->setNumMipmaps( -1 );
-    tex->setTextureFiltering( Ogre::TFO_NONE );
-
     m_SceneManager->addRenderQueueListener( this );
 }
 
@@ -292,10 +277,6 @@ Background2D::OnResize()
         {
             vertex_buffer = m_SubtractVertexBuffer;
         }
-        else if( m_Tiles[ i ].blending == QGears::B_MULTIPLY )
-        {
-            vertex_buffer = m_MultiplyVertexBuffer;
-        }
 
         float* writeIterator = ( float* )vertex_buffer->lock( Ogre::HardwareBuffer::HBL_NORMAL );
 
@@ -537,9 +518,6 @@ Background2D::SetImage( const Ogre::String& image )
     pass = m_SubtractMaterial->getTechnique( 0 )->getPass( 0 );
     tex = pass->getTextureUnitState( 0 );
     tex->setTextureName( image );
-    pass = m_MultiplyMaterial->getTechnique( 0 )->getPass( 0 );
-    tex = pass->getTextureUnitState( 0 );
-    tex->setTextureName( image );
 }
 
 //------------------------------------------------------------------------------
@@ -636,12 +614,6 @@ Background2D::AddTile( const int x, const int y, const int width, const int heig
         vertex_buffer = m_SubtractVertexBuffer;
         max_vertex_count = m_SubtractMaxVertexCount;
     }
-    else if( blending == QGears::B_MULTIPLY )
-    {
-        render_op = m_MultiplyRenderOp;
-        vertex_buffer = m_MultiplyVertexBuffer;
-        max_vertex_count = m_MultiplyMaxVertexCount;
-    }
     else
     {
         LOG_ERROR( "Unknown blending type." );
@@ -778,10 +750,6 @@ Background2D::UpdateTileUV( const unsigned int tile_id, const float u1, const fl
     {
         vertex_buffer = m_SubtractVertexBuffer;
     }
-    else if( m_Tiles[ tile_id ].blending == QGears::B_MULTIPLY )
-    {
-        vertex_buffer = m_MultiplyVertexBuffer;
-    }
 
     float* writeIterator = ( float* )vertex_buffer->lock( Ogre::HardwareBuffer::HBL_NORMAL );
 
@@ -924,12 +892,6 @@ Background2D::renderQueueEnded( Ogre::uint8 queueGroupId, const Ogre::String& in
             m_SceneManager->_setPass( m_SubtractMaterial->getTechnique( 0 )->getPass( 0 ), true, false );
             m_RenderSystem->_render( m_SubtractRenderOp );
         }
-
-        if( m_MultiplyRenderOp.vertexData->vertexCount != 0 )
-        {
-            m_SceneManager->_setPass( m_MultiplyMaterial->getTechnique( 0 )->getPass( 0 ), true, false );
-            m_RenderSystem->_render( m_MultiplyRenderOp );
-        }
     }
 }
 
@@ -997,27 +959,6 @@ Background2D::CreateVertexBuffers()
     m_SubtractRenderOp.vertexData->vertexBufferBinding->setBinding( 0, m_SubtractVertexBuffer );
     m_SubtractRenderOp.operationType = Ogre::RenderOperation::OT_TRIANGLE_LIST;
     m_SubtractRenderOp.useIndexes = false;
-
-
-
-    m_MultiplyMaxVertexCount = 256 * TILE_VERTEX_COUNT; // FIXME: 256?
-    m_MultiplyRenderOp.vertexData = new Ogre::VertexData;
-    m_MultiplyRenderOp.vertexData->vertexStart = 0;
-
-    vDecl = m_MultiplyRenderOp.vertexData->vertexDeclaration;
-
-    offset = 0;
-    vDecl->addElement( 0, 0, Ogre::VET_FLOAT3, Ogre::VES_POSITION );
-    offset += Ogre::VertexElement::getTypeSize( Ogre::VET_FLOAT3 );
-    vDecl->addElement( 0, offset, Ogre::VET_FLOAT4, Ogre::VES_DIFFUSE );
-    offset += Ogre::VertexElement::getTypeSize( Ogre::VET_FLOAT4 );
-    vDecl->addElement( 0, offset, Ogre::VET_FLOAT2, Ogre::VES_TEXTURE_COORDINATES );
-
-    m_MultiplyVertexBuffer = Ogre::HardwareBufferManager::getSingletonPtr()->createVertexBuffer( vDecl->getVertexSize( 0 ), m_MultiplyMaxVertexCount, Ogre::HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY, false );
-
-    m_MultiplyRenderOp.vertexData->vertexBufferBinding->setBinding( 0, m_AMultiplyVertexBuffer );
-    m_MultiplyRenderOp.operationType = Ogre::RenderOperation::OT_TRIANGLE_LIST;
-    m_MultiplyRenderOp.useIndexes = false;
 }
 
 //------------------------------------------------------------------------------
@@ -1038,11 +979,6 @@ Background2D::DestroyVertexBuffers()
     m_SubtractRenderOp.vertexData = 0;
     m_SubtractVertexBuffer.setNull();
     m_SubtractMaxVertexCount = 0;
-
-    delete m_MultiplyRenderOp.vertexData;
-    m_MultiplyRenderOp.vertexData = 0;
-    m_MultiplyVertexBuffer.setNull();
-    m_MultiplyMaxVertexCount = 0;
 }
 
 //------------------------------------------------------------------------------

+ 0 - 4
QGearsMain/src/core/XmlBackground2DFile.cpp

@@ -72,10 +72,6 @@ XmlBackground2DFile::Load()
                 {
                     blending = QGears::B_SUBTRACT;
                 }
-                else if ( blending_str == "multiply" )
-                {
-                    blending = QGears::B_MULTIPLY;
-                }
                 else
                 {
                     blending = QGears::B_ALPHA;

+ 0 - 6
QGearsMain/src/map/QGearsBackground2DFileXMLSerializer.cpp

@@ -34,7 +34,6 @@ namespace QGears
     const String Background2DFileXMLSerializer::BLENDING_ALPHA   ( "alpha"    );
     const String Background2DFileXMLSerializer::BLENDING_ADD     ( "add"      );
     const String Background2DFileXMLSerializer::BLENDING_SUBTRACT( "subtract" );
-    const String Background2DFileXMLSerializer::BLENDING_MULTIPLY( "multiply" );
 
     //---------------------------------------------------------------------
     Background2DFileXMLSerializer::Background2DFileXMLSerializer() :
@@ -84,11 +83,6 @@ namespace QGears
             pDest = B_SUBTRACT;
             return true;
         }
-        if( *value == BLENDING_MULTIPLY )
-        {
-            pDest = B_MULTIPLY;
-            return true;
-        }
         pDest = pDefault;
         return false;
     }

+ 4 - 4
utilities/ffvii_field_dat_dumper/src/DatFile.cpp

@@ -3342,10 +3342,10 @@ DatFile::AddTile( const Tile& tile, MimFile& mim, Logger* export_text )
     {
         blending_str = "subtract";
     }
-    else if( tile.blending == 3 )
-    {
-        blending_str = "multiply";
-    }
+    // else if( tile.blending == 3 )
+    // {
+    //     blending_str = "add"; // source + 0.25 * destination
+    // }
     else
     {
         LOGGER->Log( "Tile blending with type \"" + Ogre::StringConverter::toString( tile.blending ) + "\" not supported." );