| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010, Google Inc. | 2 * Copyright 2010, Google Inc. |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 * @extends {o3d.ParamObject} | 59 * @extends {o3d.ParamObject} |
| 60 */ | 60 */ |
| 61 o3d.FunctionEval = function() { | 61 o3d.FunctionEval = function() { |
| 62 o3d.ParamObject.call(this); | 62 o3d.ParamObject.call(this); |
| 63 | 63 |
| 64 /** | 64 /** |
| 65 * Read/write input value to the function. | 65 * Read/write input value to the function. |
| 66 * @private | 66 * @private |
| 67 * @type {o3d.ParamFloat} | 67 * @type {o3d.ParamFloat} |
| 68 */ | 68 */ |
| 69 this.input_param_ = this.createParam("input", "ParamFloat"); | 69 this.input_param_ = this.getParam("input"); |
| 70 | 70 |
| 71 /** | 71 /** |
| 72 * ParamFunction whose value is a o3d.Function or subclass. | 72 * ParamFunction whose value is a o3d.Function or subclass. |
| 73 * @private | 73 * @private |
| 74 * @type {o3d.ParamFunction} | 74 * @type {o3d.ParamFunction} |
| 75 */ | 75 */ |
| 76 this.func_param_ = this.createParam("functionObject", "ParamFunction"); | 76 this.func_param_ = this.getParam("functionObject"); |
| 77 | 77 |
| 78 /** | 78 /** |
| 79 * Read-only output value. Value is cached if input does not change. | 79 * Read-only output value. Value is cached if input does not change. |
| 80 * @private | 80 * @private |
| 81 * @type {o3d.ParamFloatOutput} | 81 * @type {o3d.ParamFloatOutput} |
| 82 */ | 82 */ |
| 83 this.output_param_ = this.createParam("output", "ParamFloatOutput"); | 83 this.output_param_ = this.getParam("output"); |
| 84 | 84 |
| 85 /** | 85 /** |
| 86 * Context value to allow faster evaluation for adjacent input values. | 86 * Context value to allow faster evaluation for adjacent input values. |
| 87 * Used by the o3d.Function itself, but stored here to allow multiple | 87 * Used by the o3d.Function itself, but stored here to allow multiple |
| 88 * FunctionEval objects to share the same Function object. | 88 * FunctionEval objects to share the same Function object. |
| 89 * @private | 89 * @private |
| 90 * @type {object} | 90 * @type {object} |
| 91 */ | 91 */ |
| 92 this.func_context_ = {}; | 92 this.func_context_ = {}; |
| 93 | 93 |
| 94 /** | 94 /** |
| 95 * Last input value to check if cache needs to be invalidated. | 95 * Last input value to check if cache needs to be invalidated. |
| 96 * @private | 96 * @private |
| 97 * @type {number} | 97 * @type {number} |
| 98 */ | 98 */ |
| 99 this.last_input_value_ = null; | 99 this.last_input_value_ = null; |
| 100 | 100 |
| 101 /** | 101 /** |
| 102 * Cache of the last output value. | 102 * Cache of the last output value. |
| 103 * @private | 103 * @private |
| 104 * @type {number} | 104 * @type {number} |
| 105 */ | 105 */ |
| 106 this.last_output_value_ = null; | 106 this.last_output_value_ = null; |
| 107 }; | 107 }; |
| 108 o3d.inherit('FunctionEval', 'ParamObject'); | 108 o3d.inherit('FunctionEval', 'ParamObject'); |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * Read-only output value. Value is cached if input does not change. | 111 * Read-only output value. Value is cached if input does not change. |
| 112 * @private | 112 * @type {number} |
| 113 * @type {o3d.ParamFloatOutput} | |
| 114 */ | 113 */ |
| 115 o3d.FunctionEval.prototype.__defineGetter__("output", | 114 o3d.ParamObject.setUpO3DParam_(o3d.FunctionEval, "output", "ParamFloatOutput"); |
| 116 function() { | |
| 117 return this.output_param_.value; | |
| 118 }); | |
| 119 | 115 |
| 120 /** | 116 /** |
| 121 * Read/write input value to the function. | 117 * Read/write input value to the function. |
| 122 * @type {o3d.ParamFloat} | 118 * @type {number} |
| 123 */ | 119 */ |
| 124 o3d.FunctionEval.prototype.__defineGetter__("input", | 120 o3d.ParamObject.setUpO3DParam_(o3d.FunctionEval, "input", "ParamFloat"); |
| 125 function() { | |
| 126 return this.input_param_.value; | |
| 127 }); | |
| 128 o3d.FunctionEval.prototype.__defineSetter__("input", | |
| 129 function(newInput) { | |
| 130 this.input_param_.value = newInput; | |
| 131 }); | |
| 132 | 121 |
| 133 /** | 122 /** |
| 134 * o3d.Function object (or subclass) with evaluate function. | 123 * o3d.Function object (or subclass) with evaluate function. |
| 135 * @private | |
| 136 * @type {o3d.Function} | 124 * @type {o3d.Function} |
| 137 */ | 125 */ |
| 138 o3d.FunctionEval.prototype.__defineGetter__("functionObject", | 126 o3d.ParamObject.setUpO3DParam_(o3d.FunctionEval, "functionObject", |
| 139 function() { | 127 "ParamFunction"); |
| 140 return this.func_param_.value; | |
| 141 }); | |
| 142 o3d.FunctionEval.prototype.__defineSetter__("functionObject", | |
| 143 function(newFunc) { | |
| 144 this.func_param_.value = newFunc; | |
| 145 }); | |
| 146 | 128 |
| 147 /** | 129 /** |
| 148 * Called by o3d.Param*Output whenever its value gets read. | 130 * Called by o3d.Param*Output whenever its value gets read. |
| 149 * This function should be responsible for caching the last value if necessary. | 131 * This function should be responsible for caching the last value if necessary. |
| 150 * @return {number} The result of evaluating the function. | 132 * @return {number} The result of evaluating the function. |
| 151 */ | 133 */ |
| 152 o3d.FunctionEval.prototype.updateOutputs = function() { | 134 o3d.FunctionEval.prototype.updateOutputs = function() { |
| 153 var new_input_value = this.input_param_.value; | 135 var new_input_value = this.input_param_.value; |
| 154 if (this.last_input_value_ != new_input_value) { | 136 if (this.last_input_value_ != new_input_value) { |
| 155 this.last_output_value_ = | 137 this.last_output_value_ = |
| 156 this.func_param_.value.evaluate(this.last_input_value_, | 138 this.func_param_.value.evaluate(this.last_input_value_, |
| 157 this.func_context_); | 139 this.func_context_); |
| 158 this.last_input_value_ = new_input_value; | 140 this.last_input_value_ = new_input_value; |
| 159 } | 141 } |
| 160 return this.last_output_value_; | 142 return this.last_output_value_; |
| 161 }; | 143 }; |
| OLD | NEW |