blob: 8a0d760b976e2c1746b7f78fede69a83c696a06c [file] [log] [blame]
/**
* projectM -- Milkdrop-esque visualisation SDK
* Copyright (C)2003-2004 projectM Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* See 'LICENSE.txt' included within this release
*
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include "fatal.h"
#include "Common.hpp"
#include "Expr.hpp"
#include "Eval.hpp"
#include "Param.hpp"
#include "PerPixelEqn.hpp"
#include <map>
#include "wipemalloc.h"
#include <cassert>
/* Evaluates a per pixel equation */
void
PerPixelEqn::evaluate(int mesh_i, int mesh_j)
{
GenExpr * eqn_ptr = 0;
eqn_ptr = this->gen_expr;
float ** param_matrix = (float**)this->param->matrix;
if (param_matrix == 0) {
assert(param->engine_val);
(*(float*)param->engine_val) = eqn_ptr->eval_gen_expr(mesh_i, mesh_j);
} else {
assert(!(eqn_ptr == NULL || param_matrix == NULL));
param_matrix[mesh_i][mesh_j] = eqn_ptr->eval_gen_expr(mesh_i, mesh_j);
/* Now that this parameter has been referenced with a per
pixel equation, we let the evaluator know by setting
this flag */
/// @bug review and verify this behavior
param->matrix_flag = true;
param->flags |= P_FLAG_PER_PIXEL;
}
}
PerPixelEqn::PerPixelEqn(int _index, Param * _param, GenExpr * _gen_expr):index(_index), param(_param), gen_expr(_gen_expr)
{
assert(index >= 0);
assert(param != 0);
assert(gen_expr != 0);
}
PerPixelEqn::~PerPixelEqn()
{
if (gen_expr)
delete (gen_expr);
}