// Aqsis // Copyright © 1997 - 2001, Paul C. Gregory // // Contact: pgregory@aqsis.org // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA /** \file \brief Implements classes and support functionality for the shader virtual machine. \author Paul C. Gregory (pgregory@aqsis.org) */ #include "aqsis.h" #include "isurface.h" #include "parameters.h" #include "vector3d.h" #include "vector4d.h" #include "matrix.h" #include "sstring.h" #include "color.h" #include "renderer.h" START_NAMESPACE( Aqsis ) /** Default constructor * \param strName Character pointer to parameter name. * \param Count Integer value count, for arrays. */ CqParameter::CqParameter( const char* strName, TqInt Count ) : m_strName( strName ), m_Count( Count ) { /// \note Had to remove this as paramters are now created as part of the Renderer construction, so the /// renderer context isn't ready yet. // QGetRenderContext() ->Stats().IncParametersAllocated(); assert( Count >= 1 ); STATS_INC( PRM_created ); STATS_INC( PRM_current ); TqInt cPRM = STATS_GETI( PRM_current ); TqInt cPeak = STATS_GETI( PRM_peak ); STATS_SETI( PRM_peak, cPRM > cPeak ? cPRM : cPeak ); m_hash = CqString::hash(strName); } /** Copy constructor */ CqParameter::CqParameter( const CqParameter& From ) : m_strName( From.m_strName ), m_Count( From.m_Count ), m_hash(From.m_hash) { /// \note Had to remove this as paramters are now created as part of the Renderer construction, so the /// renderer context isn't ready yet. // QGetRenderContext() ->Stats().IncParametersAllocated(); STATS_INC( PRM_created ); STATS_INC( PRM_current ); TqInt cPRM = STATS_GETI( PRM_current ); TqInt cPeak = STATS_GETI( PRM_peak ); STATS_SETI( PRM_peak, cPRM > cPeak ? cPRM : cPeak ); } CqParameter::~CqParameter() { /// \note Had to remove this as paramters are now created as part of the Renderer construction, so the /// renderer context isn't ready yet. // QGetRenderContext() ->Stats().IncParametersDeallocated(); STATS_DEC( PRM_current ); } CqParameter* ( *gVariableCreateFuncsConstant[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, 0, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, CqParameterTypedConstant::Create, 0, CqParameterTypedConstant::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsUniform[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, 0, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, CqParameterTypedUniform::Create, 0, CqParameterTypedUniform::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsVarying[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, 0, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, CqParameterTypedVarying::Create, 0, CqParameterTypedVarying::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsVertex[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, 0, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, CqParameterTypedVertex::Create, 0, CqParameterTypedVertex::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsFaceVarying[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, 0, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, CqParameterTypedFaceVarying::Create, 0, CqParameterTypedFaceVarying::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsFaceVertex[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, 0, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, CqParameterTypedFaceVertex::Create, 0, CqParameterTypedFaceVertex::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsConstantArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, 0, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, CqParameterTypedConstantArray::Create, 0, CqParameterTypedConstantArray::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsUniformArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, 0, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, CqParameterTypedUniformArray::Create, 0, CqParameterTypedUniformArray::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsVaryingArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, 0, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, CqParameterTypedVaryingArray::Create, 0, CqParameterTypedVaryingArray::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsVertexArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, 0, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, CqParameterTypedVertexArray::Create, 0, CqParameterTypedVertexArray::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsFaceVaryingArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, 0, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, CqParameterTypedFaceVaryingArray::Create, 0, CqParameterTypedFaceVaryingArray::Create, 0, 0, }; CqParameter* ( *gVariableCreateFuncsFaceVertexArray[] ) ( const char* strName, TqInt Count ) = { 0, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, 0, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, CqParameterTypedFaceVertexArray::Create, 0, CqParameterTypedFaceVertexArray::Create, 0, 0, }; //--------------------------------------------------------------------- /** Copy constructor. */ CqNamedParameterList::CqNamedParameterList( const CqNamedParameterList& From ) : m_strName( From.m_strName ), m_hash( From.m_hash) { TqInt i = From.m_aParameters.size(); while ( i-- > 0 ) { m_aParameters.push_back( From.m_aParameters[ i ] ->Clone() ); } } END_NAMESPACE( Aqsis ) //---------------------------------------------------------------------