added warp and comp parameters

git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/trunk@1079 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
w1z7ard
2008-06-30 03:58:35 +00:00
parent 18dbb1576a
commit ca82cd628b
6 changed files with 142 additions and 37 deletions

View File

@ -15,11 +15,11 @@ BuiltinParams::BuiltinParams() {}
BuiltinParams::BuiltinParams(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
{
int ret;
int ret;
if ((ret = init_builtin_param_db(presetInputs, presetOutputs)) != PROJECTM_SUCCESS)
{
std::cout << "failed to allocate builtin parameter database with error " << ret << std::endl;;
throw ret;
throw ret;
}
}
@ -193,6 +193,20 @@ std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower);
}
int BuiltinParams::load_builtin_param_string( const std::string & name, std::string * engine_val, short int flags) {
/* Creates a new parameter of type string */
Param * param = Param::new_param_string(name.c_str(), flags, engine_val);
if (insert_builtin_param( param ) < 0)
{
delete param;
return PROJECTM_ERROR;
}
return PROJECTM_SUCCESS;
}
/* Loads a boolean parameter */
int BuiltinParams::load_builtin_param_bool(const std:: string & name, void * engine_val, short int flags,
int init_val, const std::string &alt_name)
@ -391,6 +405,8 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
load_builtin_param_float("q7", (void*)&presetOutputs.q7, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
load_builtin_param_float("q8", (void*)&presetOutputs.q8, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
//param = Param::new_param_string ( "imageurl", P_FLAG_NONE, &this->imageUrl);
/* variables added in 1.04 */
load_builtin_param_int("meshx", (void*)&presetInputs.gx, P_FLAG_READONLY, 32, 96, 8, "");
load_builtin_param_int("meshy", (void*)&presetInputs.gy, P_FLAG_READONLY, 24, 72, 6, "");

View File

@ -63,6 +63,9 @@ public:
int lower_bound, const std::string & alt_name );
int load_builtin_param_bool( const std::string & name, void *engine_val, short int flags,
int init_val, const std::string & alt_name );
int load_builtin_param_string( const std::string & name, std::string * engine_val, short int flags);
int insert_builtin_param( Param *param );
template <class Fun>

View File

@ -534,7 +534,7 @@ void CustomWave::evalInitConds()
ColoredPoint CustomWave::PerPoint(ColoredPoint p, const WaveformContext context)
{
r_mesh[context.sample_int] = r;
r_mesh[context.sample_int] = r;
g_mesh[context.sample_int] = g;
b_mesh[context.sample_int] = b;
a_mesh[context.sample_int] = a;

View File

@ -36,7 +36,7 @@
#include "Func.hpp"
#include "Param.hpp"
//#define EVAL_DEBUG 2
#define EVAL_DEBUG 0
//#define EVAL_DEBUG_DOUBLE 2
#define VAL_T 1

View File

@ -206,12 +206,6 @@ token_t Parser::parseToken(std::istream & fs, char * string)
}
// if (fs && fs.get() == '\n') {
// line_mode = UNSET_LINE_MODE;
// return tEOL;
// } else if (fs)
//fs.unget();
break;
}
@ -237,24 +231,11 @@ token_t Parser::parseToken(std::istream & fs, char * string)
break;
default:
if (string != NULL)
{
/// @bug remove this nonsense
if (c == '\r')
{
std::cerr << "R" << std::endl;
abort();
}
if (c == '\b')
{
std::cerr << "B" << std::endl;
abort();
}
string[i] = tolower(c);
//string[i+1] = 0;
//std::cerr << "string is \n\"" << string << "\"" << std::endl;
}
}
}
@ -455,13 +436,25 @@ int Parser::parse_line(std::istream & fs, Preset * preset)
} else
fs.unget();
// if (z == 2)
// ;
// return PROJECTM_PARSE_ERROR;
//else
// fs.unget();
/* CASE: WARP CODE */
if (!strncmp(eqn_string, WARP_STRING, WARP_STRING_LENGTH))
{
std::cout << "parsing warp string block\n" << std::endl;
parse_string_block(fs, &preset->presetOutputs().shader.warp);
return PROJECTM_SUCCESS;
}
/* CASE: COMPOSITE CODE */
if (!strncmp(eqn_string, COMPOSITE_STRING, COMPOSITE_STRING_LENGTH))
{
std::cout << "parsing composite string block\n" << std::endl;
parse_string_block(fs, &preset->presetOutputs().shader.composite);
return PROJECTM_SUCCESS;
}
/* CASE: PER FRAME INIT EQUATION */
if (!strncmp(eqn_string, PER_FRAME_INIT_STRING, PER_FRAME_INIT_STRING_LENGTH))
{
@ -1488,7 +1481,7 @@ InitCond * Parser::parse_init_cond(std::istream & fs, char * name, Preset * pre
/* At this point, a parameter has been created or was found
in the database. */
if (PARSE_DEBUG) printf("parse_init_cond: parsing initial condition value... (LINE %d)\n", line_count);
if (PARSE_DEBUG) printf("parsed_init_cond: parsing initial condition value... (LINE %d)\n", line_count);
/* integer value (boolean is an integer in C) */
if ( (param->type == P_TYPE_BOOL))
@ -1539,7 +1532,18 @@ InitCond * Parser::parse_init_cond(std::istream & fs, char * name, Preset * pre
return init_cond;
}
/* Parses a per frame init equation, not sure if this works right now */
void Parser::parse_string_block(std::istream & fs, std::string * out_string) {
char name[MAX_TOKEN_SIZE];
token_t token;
readStringUntil(fs, out_string);
std::cout << "out_string:\n " << *out_string << "\n" << std::endl;
}
InitCond * Parser::parse_per_frame_init_eqn(std::istream & fs, Preset * preset, std::map<std::string,Param*> * database)
{
@ -1636,6 +1640,83 @@ InitCond * Parser::parse_per_frame_init_eqn(std::istream & fs, Preset * preset,
return init_cond;
}
void Parser::readStringUntil(std::istream & fs, std::string * out_buffer, bool wrapAround) {
int string_line_buffer_index = 0;
char c;
/* Loop until a delimiter is found, or the maximum string size is found */
while (true)
{
if (!fs || fs.eof())
c = EOF;
else
c = fs.get();
/* Now interpret the character */
switch (c)
{
case '\n':
line_count++;
if (wrapAround)
{
std::ostringstream buffer;
// if (PARSE_DEBUG) std::cerr << "token wrap! line " << line_count << std::endl;
while (c != '=')
{
if (!fs || fs.eof())
{
line_count = 1;
line_mode = UNSET_LINE_MODE;
// if (PARSE_DEBUG) std::cerr << "token wrap: end of file" << std::endl;
return;
}
else {
c = fs.get();
if ( c != '=')
buffer << c;
}
}
if (!wrapsToNextLine(buffer.str())) {
wrapAround = false;
int buf_size = (int)buffer.str().length();
// <= to also remove equal sign parsing from stream
for (int k = 0; k <= buf_size; k++) {
if (fs)
fs.unget();
else
abort();
}
return;
}
break;
}
return;
case EOF:
line_count = 1;
return;
default:
if (out_buffer != NULL)
{
out_buffer->push_back(c);
}
}
}
}
int Parser::parse_wavecode(char * token, std::istream & fs, Preset * preset)
{
@ -2090,10 +2171,6 @@ int Parser::parse_wave_helper(std::istream & fs, Preset * preset, int id, char
/* Insert the equation in the per frame equation tree */
custom_wave->per_frame_init_eqn_tree.insert(std::make_pair(init_cond->param->name,init_cond));
{
if (PARSE_DEBUG) printf("parse_wave_helper: failed to update string buffer (LINE %d)\n", line_count);
return PROJECTM_FAILURE;
}
line_mode = CUSTOM_WAVE_PER_FRAME_INIT_LINE_MODE;
init_cond->evaluate(true);
return PROJECTM_SUCCESS;

View File

@ -28,8 +28,8 @@
#ifndef _PARSER_H
#define _PARSER_H
//#define PARSE_DEBUG 2
#define PARSE_DEBUG 0
//#define PARSE_DEBUG 0
#include <stdio.h>
@ -63,6 +63,13 @@
#define SHAPECODE_STRING "shapecode_"
#define SHAPECODE_STRING_LENGTH 10
#define WARP_STRING "warp_"
#define WARP_STRING_LENGTH 5
#define COMPOSITE_STRING "comp_"
#define COMPOSITE_STRING_LENGTH 5
#define SHAPE_STRING "shape_"
#define SHAPE_STRING_LENGTH 6
@ -166,10 +173,12 @@ public:
static int parse_shapecode(char * eqn_string, std::istream & fs, Preset * preset);
static int parse_shapecode_prefix(char * token, int * id, char ** var_string);
static void parse_string_block(std::istream & fs, std::string * out_string);
static int parse_wave(char * eqn_string, std::istream & fs, Preset * preset);
static int parse_shape(char * eqn_string, std::istream & fs, Preset * preset);
static int parse_shape_prefix(char * token, int * id, char ** eqn_string);
static void readStringUntil(std::istream & fs, std::string * out_buffer, bool wrapAround = true) ;
static int update_string_buffer(char * buffer, int * index);
static int string_to_float(char * string, float * float_ptr);
static int parse_shape_per_frame_init_eqn(std::istream & fs, CustomShape * custom_shape, Preset * preset);