newspeoplefor developersdocumentationdownloads

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 }

Copyright © 1999-2005 by the contributing authors. Ideas, requests, problems: Send feedback.