From: <cn...@us...> - 2010-02-23 05:53:33
|
Revision: 674 http://hgengine.svn.sourceforge.net/hgengine/?rev=674&view=rev Author: cnlohr Date: 2010-02-23 05:53:27 +0000 (Tue, 23 Feb 2010) Log Message: ----------- add some stuff for ssvgr Modified Paths: -------------- Mercury2/src/StateChanger.cpp Added Paths: ----------- Mercury2/Themes/default/File/ssvgr.xml Mercury2/Themes/default/Graphic/2by.png Added: Mercury2/Themes/default/File/ssvgr.xml =================================================================== --- Mercury2/Themes/default/File/ssvgr.xml (rev 0) +++ Mercury2/Themes/default/File/ssvgr.xml 2010-02-23 05:53:27 UTC (rev 674) @@ -0,0 +1,61 @@ +<SceneGraph name="root" setPasses="6+7" > + <!--We have to put all states that are the generic state up here. This way, the states will fall back to these --> + <asset type="StateChanger" file="ColorChange:1,1,1,1"/> + <asset type="StateChanger" file="DepthTest:1"/> + <asset type="StateChanger" file="LightingSwitch:0" enduring="1" /> + <asset type="StateChanger" file="DepthWrite:1"/> + <asset type="StateChanger" file="FaceCulling:none"/> + <asset type="StateChanger" file="BlendFunc:SRC_ALPHA,ONE_MINUS_SRC_ALPHA" /> + <asset type="StateChanger" file="AlphaFunc:GREATER,0.5" /> <!-- makes alpha ordering not matter, since it's all or nothing --> + + <node type="viewport" fov="45" aspect="1.3333" near="0.01" far="100" name="vp" > + <node type="cameranode" movx="0" movz="0" movy="0" rotx="0" roty="0" rotz="0" name="camera" > + + <node fallback="root.ground" setPasses="7" /> + + <node type="transformnode" movy="2" > + <node fallback="root.lampForest" setPasses="6" /> + </node> + <node type="transformnode" movy="0" > + <node fallback="root.lampForest" setPasses="7" /> + </node> + + <node type="transformnode" movz="-5" > + <asset type="texture" file="GRAPHIC:2by.png" filter="none" /> + <asset type="quad" /> + </node> + + </node> + </node> + + + <!-- Below here is just a library for some junk we can throw in --> + + <node type="mercurynode" name="lampForest" setPasses="0" > + <node type="transformnode" movz="-5" movx="0" movy="0" name="lamprow" > + <node type="mercurynode" name="lamp" > + <node type="transformnode" rotx="-90" > + <asset type="texture" file="MODEL:lamp.png"/> + <asset type="hgmdlmodel" file="MODEL:lampN.hgmdl" /> + </node> + </node> + <node type="transformnode" movx="1" fallback="lamprow.lamp" /> + <node type="transformnode" movx="2" fallback="lamprow.lamp" /> + <node type="transformnode" movx="3" fallback="lamprow.lamp" /> + <node type="transformnode" movx="-1" fallback="lamprow.lamp" /> + <node type="transformnode" movx="-2" fallback="lamprow.lamp" /> + <node type="transformnode" movx="-3" fallback="lamprow.lamp" /> + </node> + <node type="transformnode" movz="-6" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-7" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-8" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-9" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-4" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-3" fallback="lampForest.lamprow"/> + </node> + <node type="transformnode" rotx="-90" movz="-10" movx="0" movy="-0.99" setPasses="0" name="ground" > + <asset type="texture" file="MODEL:map.png" /> + <asset type="terrain" file="MODEL:map.hgmdl" /> + </node> + +</SceneGraph> Added: Mercury2/Themes/default/Graphic/2by.png =================================================================== (Binary files differ) Property changes on: Mercury2/Themes/default/Graphic/2by.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: Mercury2/src/StateChanger.cpp =================================================================== --- Mercury2/src/StateChanger.cpp 2010-02-23 02:19:18 UTC (rev 673) +++ Mercury2/src/StateChanger.cpp 2010-02-23 05:53:27 UTC (rev 674) @@ -150,6 +150,52 @@ REGISTER_STATECHANGE( DepthWrite ); +class FaceCulling : public StateChange +{ +public: + FaceCulling( const MVector< MString > & sParameters ) : StateChange( sParameters ) + { + if( sParameters.size() < 1 ) + { + LOG.Write( ssprintf( "Error: DepthWrite state has invalid number of parameters(%d).", sParameters.size() ) ); + return; + } + if( sParameters[0].compare( "front" ) == 0 ) + iWhich = 1; + if( sParameters[0].compare( "back" ) == 0 ) + iWhich = 2; + else + iWhich = 0; + } + + void Stringify( MString & sOut ) + { + sOut = (iWhich)?((iWhich==1)?"front":"back"):""; + } + + void Activate() + { + if( iWhich ) + { + GLCALL( glEnable(GL_CULL_FACE) ); + if( iWhich == 1 ) + {GLCALL( glCullFace(GL_FRONT) );} + else + {GLCALL( glCullFace(GL_BACK) );} + } + else + { + GLCALL( glDisable(GL_CULL_FACE) ); + } + } + + STATECHANGE_RTTI( FaceCulling ); + int iWhich; +}; + +REGISTER_STATECHANGE( FaceCulling ); + + class BlendFunc : public StateChange { public: @@ -225,6 +271,69 @@ REGISTER_STATECHANGE( BlendFunc ); +class AlphaFunc : public StateChange +{ +public: + AlphaFunc( const MVector< MString > & sParameters ) : StateChange( sParameters ) + { + if( sParameters.size() < 2 ) + { + LOG.Write( ssprintf( "Error: AlphaFunc state has invalid number of parameters(%d).", sParameters.size() ) ); + return; + } + + m_func = StrToAlpha(sParameters[0] ); + m_ref = StrToFloat(sParameters[1] ); + } + + void Stringify( MString & sOut ) + { + sOut = AlphaToStr(m_func) + ssprintf( ",%f", m_ref ); + } + + #define STRTOGL(x,s) if (x==#s) return GL_##s; + int StrToAlpha(const MString& s) + { + STRTOGL(s, NEVER); + STRTOGL(s, LESS); + STRTOGL(s, EQUAL); + STRTOGL(s, LEQUAL); + STRTOGL(s, GREATER); + STRTOGL(s, NOTEQUAL); + STRTOGL(s, GEQUAL); + STRTOGL(s, ALWAYS); + return -1; + } + + #define GLTOSTR(x,s) case GL_##s: return #s; + MString AlphaToStr(int blend) + { + switch (blend) + { + GLTOSTR(blend, NEVER); + GLTOSTR(blend, LESS); + GLTOSTR(blend, EQUAL); + GLTOSTR(blend, LEQUAL); + GLTOSTR(blend, GREATER); + GLTOSTR(blend, NOTEQUAL); + GLTOSTR(blend, GEQUAL); + GLTOSTR(blend, ALWAYS); + }; + } + + void Activate() + { + GLCALL( glEnable( GL_ALPHA_TEST ) ); + GLCALL( glAlphaFunc(m_func,m_ref) ); + } + + STATECHANGE_RTTI( AlphaFunc ); + int m_func; + float m_ref; +}; + +REGISTER_STATECHANGE( AlphaFunc ); + //////////////////////////////////////STATE CHANGE CHUNK////////////////////////////////////// StateChangeRegister & StateChangeRegister::Instance() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |