nmultilayerednode_main.cc
Go to the documentation of this file.00001 //------------------------------------------------------------------------------ 00002 // nmultilayerednode_main.cc 00003 // (C) 2005 RadonLabs GmbH 00004 //------------------------------------------------------------------------------ 00005 #include "scene/nmultilayerednode.h" 00006 #include "variable/nvariableserver.h" 00007 #include "scene/nrendercontext.h" 00008 #include "scene/nsceneserver.h" 00009 #include "scene/nanimator.h" 00010 00011 nNebulaScriptClass(nMultiLayeredNode, "nshapenode"); 00012 00013 //------------------------------------------------------------------------------ 00016 nMultiLayeredNode::nMultiLayeredNode() 00017 { 00018 texCount = 0; 00019 } 00020 00021 //------------------------------------------------------------------------------ 00024 nMultiLayeredNode::~nMultiLayeredNode() 00025 { 00026 // empty 00027 } 00028 00029 //------------------------------------------------------------------------------ 00032 bool 00033 nMultiLayeredNode::RenderGeometry(nSceneServer* sceneServer, nRenderContext* renderContext) 00034 { 00035 // build uv-value-matrix for dx9 shader 00036 matrix44 uvStretchMatrix; 00037 for (int i = 0; i < this->texCount; i++) 00038 uvStretchMatrix.m[i/4][i%4] = this->uvStretch[i]; 00039 00040 nShader2* shd = nGfxServer2::Instance()->GetShader(); 00041 if (shd->IsParameterUsed(nShaderState::MLPUVStretch)) 00042 { 00043 shd->SetMatrix(nShaderState::MLPUVStretch, uvStretchMatrix); 00044 } 00045 00046 // set uv matrices for dx7 shader 00047 for (int i = 0; i < 5; i++) 00048 { 00049 float stretch = this->dx7uvStretch[i]; 00050 matrix44 uvStretch; 00051 uvStretch.ident(); 00052 uvStretch.m[0][0] = stretch; 00053 uvStretch.m[1][1] = stretch; 00054 uvStretch.m[2][2] = stretch; 00055 uvStretch.m[3][3] = stretch; 00056 switch (i) 00057 { 00058 case 0: if (shd->IsParameterUsed(nShaderState::UVStretch0)) shd->SetMatrix(nShaderState::UVStretch0, uvStretch); break; 00059 case 1: if (shd->IsParameterUsed(nShaderState::UVStretch1)) shd->SetMatrix(nShaderState::UVStretch1, uvStretch); break; 00060 case 2: if (shd->IsParameterUsed(nShaderState::UVStretch2)) shd->SetMatrix(nShaderState::UVStretch2, uvStretch); break; 00061 case 3: if (shd->IsParameterUsed(nShaderState::UVStretch3)) shd->SetMatrix(nShaderState::UVStretch3, uvStretch); break; 00062 case 4: if (shd->IsParameterUsed(nShaderState::UVStretch4)) shd->SetMatrix(nShaderState::UVStretch4, uvStretch); break; 00063 } 00064 } 00065 return nShapeNode::RenderGeometry(sceneServer, renderContext); 00066 }