/****************************************************************************
 *                  patches.h
 *
 * switches for patches from MegaPOV
 *
 * from Persistence of Vision(tm) Ray Tracer version 3.6.
 * Copyright 1991-2003 Persistence of Vision Team
 * Copyright 2003-2004 Persistence of Vision Raytracer Pty. Ltd.
 *---------------------------------------------------------------------------
 * NOTICE: This source code file is provided so that users may experiment
 * with enhancements to POV-Ray and to port the software to platforms other
 * than those supported by the POV-Ray developers. There are strict rules
 * regarding how you are permitted to use this file. These rules are contained
 * in the distribution and derivative versions licenses which should have been
 * provided with this file.
 *
 * These licences may be found online, linked from the end-user license
 * agreement that is located at http://www.povray.org/povlegal.html
 *---------------------------------------------------------------------------
 * This program is based on the popular DKB raytracer version 2.12.
 * DKBTrace was originally written by David K. Buck.
 * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
 *---------------------------------------------------------------------------
 *
 *===========================================================================
 * This file is part of MegaPOV, a modified and unofficial version of POV-Ray
 * For more information on MegaPOV visit our website:
 * http://megapov.inetart.net/
 *===========================================================================
 *
 * $RCSfile: patches.h,v $
 * $Revision: 1.56 $
 * $Author: chris $
 *
 *****************************************************************************/
#ifndef PATCHES_H
#define PATCHES_H
#define MEGAPOV_MASTER_SWITCH //Main switch, comment this out to turn off all patches
                              //for testing purposes.

#ifdef MEGAPOV_MASTER_SWITCH
  #define UNOFFICIAL_BLOCKING_PATCH  //needed for all patches, must be first
  //Main switch for each author
  #define PATCHES_BY_ABX
  #define PATCHES_BY_CHRISTOPHE_BOUFFARTIGUE
  #define PATCHES_BY_CHRISTOPH_HORMANN
  #define PATCHES_BY_MASSIMO_VALENTINI
  #define PATCHES_BY_THORSTEN_FROEHLICH
  #define PATCHES_BY_VAHUR_KROUVERK
  #define PATCHES_BY_WILLIAM_F_POKORNY
  #define PATCHES_BY_JURJEN
  #define PATCHES_BY_MICHA_RISER
  #define PATCHES_BY_SMELLENBERGH
  #define PATCHES_BY_NATHAN_KOPP
  #define PATCHES_BY_CHRIS_HUFF
  #define PATCHES_BY_KARI_KIVISALO
  #define PATCHES_BY_MAEL
  #define PATCHES_BY_THOMAS_WILLHALM
  #define PATCHES_BY_LUTZ_PETER_HOOGE

  #ifdef PATCHES_BY_ABX
  // patches to avoid some warnings with gcc (under djgpp), bcc and dmc
    #define AVOID_TYPE_CONVERSION_WARNINGS_PATCH
    #define AVOID_MIGHT_BE_USED_UNINITIALIZED_WARNINGS_PATCH
    #define AVOID_EMPTY_STRING_WARNING
    #define REMOVE_NOT_USED_CODE_WARNINGS_PATCH
    #define AVOID_ALWAYS_FALSE_COMPARISON_WARNINGS_PATCH
    #define WHITE_SPACE_BEFORE_SEMICOLON_PATCH

  // command options
    #define FRAME_STEP_PATCH

  // radiosity
    #define CACHE_IN_ANIMATED_RADIOSITY_PATCH

  // connecting similar code
    #define MAKE_COLOR_SHORTER_PATCH

  // parametric related patches
    #define PARAMETRIC_MINOR_CHANGES_PATCH

  // spline related patches
    #define SOR_SPLINE_PATCH
    #define TCB_SPLINE_PATCH // Kochanek-Bartels
    #define AKIMA_SPLINE_PATCH
    #define BASIC_X_SPLINE_PATCH
    #define EXTENDED_X_SPLINE_PATCH
    #define GENERAL_X_SPLINE_PATCH
    #define SPLINE_LIKE_ARRAY_ACCESS_PATCH

  // internal functions
    #define F_TRIANGLE_PATCH
    #define MISSED_FLOAT_CONSTANTS_RECOGNITION_PATCH

  // expressions
    #define IS_PATCH
    #define VECTORS_IN_DIMENSION_SIZE_PATCH
    #define POLYNOMIAL_SOLVER_PATCH
    #define NTH_OUTPUT_FILE_NAME_PATCH

  // platform specific patches
    #define CUSTOM_KEYWORDS_IN_WINPOV_PATCH
    #define CONTINUED_BMP_BUGFIX_PATCH

  // post processing
    #define POST_PROCESS_PATCH

  // camera stuff
    #define USER_DEFINED_CAMERA_PATCH
    #define PIGMENT_CAMERA_VIEW_PATCH

  // pattern stuff
//    #define SIMPLE_PATTERN_CACHE_PATCH
    #define IMAGES_SIZES_PATCH

  // bugfixes
    #define BLOB_QUEUE_MEMORY_LEAK_PATCH

  #endif  //PATCHES_BY_ABX

  #ifdef PATCHES_BY_MASSIMO_VALENTINI
  	#define FIX_MEMORY_LEAKS_PATCH

  #endif

  #ifdef PATCHES_BY_THORSTEN_FROEHLICH
    #define SPLINE_IN_FUNCTION_PATCH
    #define MACRO_PARAMETER_BUGFIX_PATCH
  #endif  //PATCHES_BY_THORSTEN_FROEHLICH

  #ifdef PATCHES_BY_VAHUR_KROUVERK
    #define HMATH_PATCH
  #endif  //PATCHES_BY_VAHUR_KROUVERK

  #ifdef PATCHES_BY_WILLIAM_F_POKORNY
  #endif  //PATCHES_BY_WILLIAM_F_POKORNY

  #ifdef PATCHES_BY_JURJEN
    #define TRANSPARENT_INVERTED_NORMALS_PATCH
  #endif  //PATCHES_BY_JURJEN

  #ifdef PATCHES_BY_MICHA_RISER
    #define BOUNDINGS_AS_INSIDE_PATCH
  #endif  //PATCHES_BY_MICHA_RISER

  #ifdef PATCHES_BY_CHRIS_HUFF
    #define SET_PATCH
    #define GLOW_PATCH
    #define DISPLACE_WARP_PATCH
    #define LISTED_PATTERN_PATCH
    #define NOISE_PIGMENT_PATCH
  #endif  //PATCHES_BY_CHRIS_HUFF

  #ifdef PATCHES_BY_SMELLENBERGH
  	#define FASTER_PROGRESS_DISPLAY_PATCH
    #define STRDUP_MEM_TRACE_PATCH     //Will be turned off in a final release
    #define STORE_TOKEN_POSITION_START_IN_FILE_PATCH
    #define LESS_MEMORY_IN_PATTERNS_PATCH
    #define MESSAGE_PATCH
    #define TIME_DATE_PATCH
    #define TIME_MEASUREMENT_PATCH
    #define FONT_ALIGNMENT_PATCH
  #endif  //PATCHES_BY_SMELLENBERGH

  #ifdef PATCHES_BY_NATHAN_KOPP
    #define MOTION_BLUR_PATCH
    #define UNOFFICIAL_BLOCKING_PATCH  //we are MegaPOV we need #version unofficial MegaPov x.x in all files
  #endif  //PATCHES_BY_NATHAN_KOPP


  #ifdef PATCHES_BY_CHRISTOPH_HORMANN
    #define MECHANICS_SIMULATION_PATCH
    #define UNIX_FINISH_BEEP_PATCH
    #define RAD_CUSTOM_SAMPLES_PATCH
    #define RAD_SAMPLES_RANDOMIZE_PATCH
    #define NORMAL_TRANSFORM_PATCH
    #define HDR_PATCH
    #define INSIDE_FUNCTION_FOR_MESHES_PATCH
    #define NO_RADIOSITY_PATCH
    #define AREA_LIGHT_REFLECTION_PATCH
    #define CUSTOM_TONE_MAPPING_PATCH
    #define RADIOSITY_STATISTICS_PATCH
    #define RADIOSITY_VISUALIZE_PATCH
    #define RADIOSITY_ADAPTIVE_RADIUS_PATCH
    #define NEW_RADIOSITY_PRETRACE_PATCH
    #define CRAND_BUGFIX_PATCH
    #define ALPHA_CLIPPING_BUGFIX_PATCH
    #define PPM_READING_COMPATIBILITY_PATCH

    //#define RADSTATS
  #endif  //PATCHES_BY_CHRISTOPH_HORMANN

  #ifdef PATCHES_BY_CHRISTOPHE_BOUFFARTIGUE
     #define CLOTHRAY_PATCH
  #endif  //PATCHES_BY_CHRISTOPHE_BOUFFARTIGUE

  #ifdef PATCHES_BY_KARI_KIVISALO
    #define FILM_EXPOSURE_SIMULATION_PATCH
  #endif  //PATCHES_BY_KARI_KIVISALO

  #ifdef PATCHES_BY_MAEL
    #define ANGLE_OF_INCIDENCE_PATCH
    #define PROJECTION_PATCH
    #define HDR_PATCH
  #endif  //PATCHES_BY_MAEL

  #ifdef PATCHES_BY_THOMAS_WILLHALM
    #define FUR_PATCH
  #endif  //PATCHES_BY_THOMAS_WILLHALM

  #ifdef PATCHES_BY_LUTZ_PETER_HOOGE
    #define BICUBIC_INTERPOLATION_PATCH
  #endif  //PATCHES_BY_LUTZ_PETER_HOOGE

#endif  //MASTER_SWITCH
#endif	//#ifndef PATCHES_H
