123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #include "core/strings/stringFunctions.h"
- #include "core/util/str.h"
- #include "gfx/gfxDevice.h"
- #include "langElement.h"
- //**************************************************************************
- // Language element
- //**************************************************************************
- Vector<LangElement*> LangElement::elementList( __FILE__, __LINE__ );
- //--------------------------------------------------------------------------
- // Constructor
- //--------------------------------------------------------------------------
- LangElement::LangElement()
- {
- elementList.push_back( this );
- static U32 tempNum = 0;
- dSprintf( (char*)name, sizeof(name), "tempName%d", tempNum++ );
- }
- //--------------------------------------------------------------------------
- // Find element of specified name
- //--------------------------------------------------------------------------
- LangElement * LangElement::find( const char *name )
- {
- for( U32 i=0; i<elementList.size(); i++ )
- {
- if( !String::compare( (char*)elementList[i]->name, name ) )
- {
- return elementList[i];
- }
- }
-
- return NULL;
- }
- //--------------------------------------------------------------------------
- // Delete existing elements
- //--------------------------------------------------------------------------
- void LangElement::deleteElements()
- {
- for( U32 i=0; i<elementList.size(); i++ )
- {
- delete elementList[i];
- }
-
- elementList.setSize( 0 );
- }
- //--------------------------------------------------------------------------
- // Set name
- //--------------------------------------------------------------------------
- void LangElement::setName(const char* newName )
- {
- dStrncpy( ( char* ) name, newName, sizeof( name ) );
- name[ sizeof( name ) - 1 ] = '\0';
- }
- //**************************************************************************
- // Variable
- //**************************************************************************
- U32 Var::texUnitCount = 0;
- Var::Var()
- {
- dStrcpy( (char*)type, "float4", 32 );
- structName[0] = '\0';
- connectName[0] = '\0';
- constSortPos = cspUninit;
- constNum = 0;
- texCoordNum = 0;
- uniform = false;
- vertData = false;
- connector = false;
- sampler = false;
- arraySize = 1;
- texture = false;
- rank = 0;
- }
- Var::Var( const char *inName, const char *inType )
- {
- structName[0] = '\0';
- connectName[0] = '\0';
- uniform = false;
- vertData = false;
- connector = false;
- sampler = false;
- texCoordNum = 0;
- constSortPos = cspUninit;
- constNum = 0;
- arraySize = 1;
- texture = false;
- rank = 0;
- setName( inName );
- setType( inType );
- }
- void Var::setUniform(const String& constType, const String& constName, ConstantSortPosition sortPos)
- {
- uniform = true;
- setType(constType.c_str());
- setName(constName.c_str());
- constSortPos = cspPass;
- }
- //--------------------------------------------------------------------------
- // Set struct name
- //--------------------------------------------------------------------------
- void Var::setStructName(const char* newName )
- {
- dStrncpy( ( char* ) structName, newName, sizeof( structName ) );
- structName[ sizeof( structName ) - 1 ] = '\0';
- }
- //--------------------------------------------------------------------------
- // Set connect name
- //--------------------------------------------------------------------------
- void Var::setConnectName(const char* newName )
- {
- dStrncpy( ( char* ) connectName, newName, sizeof( connectName ) );
- connectName[ sizeof( connectName ) - 1 ] = '\0';
- }
- //--------------------------------------------------------------------------
- // Set type
- //--------------------------------------------------------------------------
- void Var::setType(const char *newType )
- {
- dStrncpy( ( char* ) type, newType, sizeof( type ) );
- type[ sizeof( type ) - 1 ] = '\0';
- }
- //--------------------------------------------------------------------------
- // print
- //--------------------------------------------------------------------------
- void Var::print( Stream &stream )
- {
- if( structName[0] != '\0' )
- {
- stream.write( dStrlen((char*)structName), structName );
- if(GFX->getAdapterType() == OpenGL)
- stream.write( 1, "_" );
- else
- stream.write( 1, "." );
- }
- stream.write( dStrlen((char*)name), name );
- }
- //--------------------------------------------------------------------------
- // Get next available texture unit number
- //--------------------------------------------------------------------------
- U32 Var::getTexUnitNum(U32 numElements)
- {
- U32 ret = texUnitCount;
- texUnitCount += numElements;
- return ret;
- }
- //--------------------------------------------------------------------------
- // Reset
- //--------------------------------------------------------------------------
- void Var::reset()
- {
- texUnitCount = 0;
- }
- //**************************************************************************
- // Multi line statement
- //**************************************************************************
- void MultiLine::addStatement( LangElement *elem )
- {
- AssertFatal( elem, "Attempting to add empty statement" );
- mStatementList.push_back( elem );
- }
- //--------------------------------------------------------------------------
- // Print
- //--------------------------------------------------------------------------
- void MultiLine::print( Stream &stream )
- {
- for( U32 i=0; i<mStatementList.size(); i++ )
- {
- mStatementList[i]->print( stream );
- }
- }
|