bool image_map(const Vector3d& EPoint, const PIGMENT *Pigment, TransColour& colour) { // TODO ALPHA - the caller does expect non-premultiplied data, but maybe he could profit from premultiplied data? int reg_number; DBL xcoor = 0.0, ycoor = 0.0; // If outside map coverage area, return clear if(map_pos(EPoint, Pigment->pattern.get(), &xcoor, &ycoor)) { colour = ToTransColour(RGBFTColour(1.0, 1.0, 1.0, 0.0, 1.0)); return false; } else { RGBFTColour rgbft; if (const ImagePatternImpl *pattern = dynamic_cast<ImagePatternImpl*>(Pigment->pattern.get())) image_colour_at(pattern->pImage, xcoor, ycoor, rgbft, ®_number, false); else POV_PATTERN_ASSERT(false); colour = ToTransColour(rgbft); return true; } }
SceneData::SceneData() : fog(nullptr), rainbow(nullptr), skysphere(nullptr), functionContextFactory() { atmosphereIOR = 1.0; atmosphereDispersion = 0.0; backgroundColour = ToTransColour(RGBFTColour(0.0, 0.0, 0.0, 0.0, 1.0)); ambientLight = MathColour(1.0); iridWavelengths = MathColour::DefaultWavelengths(); languageVersion = POV_RAY_VERSION_INT; languageVersionSet = false; languageVersionLate = false; warningLevel = 10; // all warnings legacyCharset = LegacyCharset::kUnspecified; noiseGenerator = kNoiseGen_RangeCorrected; explicitNoiseGenerator = false; // scene has not set the noise generator explicitly boundingMethod = 0; numberOfWaves = 10; parsedMaxTraceLevel = MAX_TRACE_LEVEL_DEFAULT; parsedAdcBailout = 1.0 / 255.0; // adc bailout sufficient for displays workingGamma.reset(); workingGammaToSRGB.reset(); inputFileGamma = SRGBGammaCurve::Get(); gammaMode = kPOVList_GammaMode_None; // default setting for v3.6.2, which in turn is the default for the language mmPerUnit = 10; useSubsurface = false; subsurfaceSamplesDiffuse = 50; subsurfaceSamplesSingle = 50; subsurfaceUseRadiosity = false; bspMaxDepth = 0; bspObjectIsectCost = bspBaseAccessCost = bspChildAccessCost = bspMissChance = 0.0f; Fractal_Iteration_Stack_Length = 0; Max_Blob_Components = 1000; // TODO FIXME - this gets set in the parser but allocated *before* that in the scene data, and if it is 0 here, a malloc may fail there because the memory requested is zero [trf] Max_Bounding_Cylinders = 100; // TODO FIXME - see note for Max_Blob_Components boundingSlabs = nullptr; splitUnions = false; removeBounds = true; tree = nullptr; }
SceneData::SceneData() : fog(NULL), rainbow(NULL), skysphere(NULL), functionContextFactory(new FunctionVM()) { atmosphereIOR = 1.0; atmosphereDispersion = 0.0; backgroundColour = ToTransColour(RGBFTColour(0.0, 0.0, 0.0, 0.0, 1.0)); ambientLight = MathColour(1.0); iridWavelengths = MathColour::DefaultWavelengths(); languageVersion = OFFICIAL_VERSION_NUMBER; languageVersionSet = false; languageVersionLate = false; warningLevel = 10; // all warnings stringEncoding = kStringEncoding_ASCII; noiseGenerator = kNoiseGen_RangeCorrected; explicitNoiseGenerator = false; // scene has not set the noise generator explicitly numberOfWaves = 10; parsedMaxTraceLevel = MAX_TRACE_LEVEL_DEFAULT; parsedAdcBailout = 1.0 / 255.0; // adc bailout sufficient for displays workingGamma.reset(); workingGammaToSRGB.reset(); inputFileGammaSet = false; // TODO remove for 3.7x inputFileGamma = SRGBGammaCurve::Get(); mmPerUnit = 10; useSubsurface = false; subsurfaceSamplesDiffuse = 50; subsurfaceSamplesSingle = 50; subsurfaceUseRadiosity = false; bspMaxDepth = 0; bspObjectIsectCost = bspBaseAccessCost = bspChildAccessCost = bspMissChance = 0.0f; Fractal_Iteration_Stack_Length = 0; Max_Blob_Components = 1000; // TODO FIXME - this gets set in the parser but allocated *before* that in the scene data, and if it is 0 here, a malloc may fail there because the memory requested is zero [trf] Max_Bounding_Cylinders = 100; // TODO FIXME - see note for Max_Blob_Components boundingSlabs = NULL; splitUnions = false; removeBounds = true; tree = NULL; }