// // Lol Engine // // Copyright: (c) 2010-2015 Sam Hocevar <sam@hocevar.net> // (c) 2009-2015 Cédric Lecacheur <jordx@free.fr> // (c) 2009-2015 Benjamin "Touky" Huet <huet.benjamin@gmail.com> // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://www.wtfpl.net/ for more details. // // // The EasyMesh class // ------------------ // #include <lol/engine-internal.h> namespace lol { //----------------------------------------------------------------------------- void EasyMesh::LoopStart(int loopnb) { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::LoopStart); BD()->CmdStack() << loopnb; return; } //Loop is only available when executing a command recording else if (BD()->IsEnabled(MeshBuildOperation::CommandExecution)) { //Only register if we're not the current loop command if (!BD()->LoopStack().Count() || BD()->LoopStack().Last().m1 != BD()->Cmdi()) BD()->LoopStack().Push(BD()->Cmdi(), loopnb); } } //----------------------------------------------------------------------------- void EasyMesh::LoopEnd() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::LoopEnd); return; } //Loop is only available when executing a command recording else if (BD()->IsEnabled(MeshBuildOperation::CommandExecution)) { //Only register if we're not the current loop command if (BD()->LoopStack().Count()) { BD()->LoopStack().Last().m2--; if (BD()->LoopStack().Last().m2 > 0) BD()->Cmdi() = BD()->LoopStack().Last().m1 - 1; else BD()->LoopStack().Pop(); } } } //----------------------------------------------------------------------------- void EasyMesh::OpenBrace() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::OpenBrace); return; } m_cursors.Push((int)m_vert.Count(), (int)m_indices.Count()); } //----------------------------------------------------------------------------- void EasyMesh::CloseBrace() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::CloseBrace); return; } m_cursors.Pop(); } //----------------------------------------------------------------------------- void EasyMesh::ToggleScaleWinding() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::ScaleWinding); return; } BD()->Toggle(MeshBuildOperation::ScaleWinding); } //----------------------------------------------------------------------------- void EasyMesh::ToggleQuadWeighting() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::QuadWeighting); return; } BD()->Toggle(MeshBuildOperation::QuadWeighting); } //----------------------------------------------------------------------------- void EasyMesh::TogglePostBuildNormal() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::PostBuildNormal); return; } BD()->Toggle(MeshBuildOperation::PostBuildComputeNormals); } //----------------------------------------------------------------------------- void EasyMesh::ToggleVerticeNoCleanup() { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::PreventVertCleanup); return; } BD()->Toggle(MeshBuildOperation::PreventVertCleanup); } //----------------------------------------------------------------------------- void EasyMesh::SetCurColor(vec4 const &color) { SetCurColorA(color); SetCurColorB(color); } //----------------------------------------------------------------------------- void EasyMesh::SetCurColorA(vec4 const &color) { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::SetColorA); BD()->CmdStack() << color; return; } BD()->ColorA() = color; } //----------------------------------------------------------------------------- void EasyMesh::SetCurColorB(vec4 const &color) { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::SetColorB); BD()->CmdStack() << color; return; } BD()->ColorB() = color; } //----------------------------------------------------------------------------- void EasyMesh::SetVertColor(vec4 const &color) { if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) { BD()->CmdStack().AddCmd(EasyMeshCmdType::SetVertColor); BD()->CmdStack() << color; return; } for (int i = m_cursors.Last().m1; i < m_vert.Count(); i++) m_vert[i].m_color = color; } } /* namespace lol */