Cycles: Initial support of 3D textures for CUDA rendering
[blender-staging.git] / intern / cycles / render / image.h
index 561550fe0d20ece799552243b1e2e99f91615448..c5561e16cb35e3ad25f3bf478c63e8ab7ff211e2 100644 (file)
@@ -11,7 +11,7 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
- * limitations under the License
+ * limitations under the License.
  */
 
 #ifndef __IMAGE_H__
@@ -29,7 +29,7 @@
 CCL_NAMESPACE_BEGIN
 
 /* generic */
-#define TEX_NUM_IMAGES                 95
+#define TEX_NUM_IMAGES                 88
 #define TEX_IMAGE_BYTE_START   TEX_NUM_FLOAT_IMAGES
 
 /* extended gpu */
@@ -40,6 +40,13 @@ CCL_NAMESPACE_BEGIN
 #define TEX_EXTENDED_NUM_IMAGES_CPU            1024
 #define TEX_EXTENDED_IMAGE_BYTE_START  TEX_EXTENDED_NUM_FLOAT_IMAGES
 
+/* Limitations for packed images.
+ *
+ * Technically number of textures is unlimited, but it should in
+ * fact be in sync with CPU limitations.
+ */
+#define TEX_PACKED_NUM_IMAGES                  1024
+
 /* color to use when textures are not found */
 #define TEX_IMAGE_MISSING_R 1
 #define TEX_IMAGE_MISSING_G 0
@@ -55,13 +62,30 @@ public:
        ImageManager();
        ~ImageManager();
 
-       int add_image(const string& filename, void *builtin_data, bool animated, bool& is_float, bool& is_linear, InterpolationType interpolation, bool use_alpha);
+       int add_image(const string& filename,
+                     void *builtin_data,
+                     bool animated,
+                     float frame,
+                     bool& is_float,
+                     bool& is_linear,
+                     InterpolationType interpolation,
+                     ExtensionType extension,
+                     bool use_alpha);
        void remove_image(int slot);
-       void remove_image(const string& filename, void *builtin_data, InterpolationType interpolation);
+       void remove_image(const string& filename,
+                         void *builtin_data,
+                         InterpolationType interpolation,
+                         ExtensionType extension);
+       void tag_reload_image(const string& filename,
+                             void *builtin_data,
+                             InterpolationType interpolation,
+                             ExtensionType extension);
        bool is_float_image(const string& filename, void *builtin_data, bool& is_linear);
 
        void device_update(Device *device, DeviceScene *dscene, Progress& progress);
+       void device_update_slot(Device *device, DeviceScene *dscene, int slot, Progress *progress);
        void device_free(Device *device, DeviceScene *dscene);
+       void device_free_builtin(Device *device, DeviceScene *dscene);
 
        void set_osl_texture_system(void *texture_system);
        void set_pack_images(bool pack_images_);
@@ -70,9 +94,9 @@ public:
 
        bool need_update;
 
-       boost::function<void(const string &filename, void *data, bool &is_float, int &width, int &height, int &depth, int &channels)> builtin_image_info_cb;
-       boost::function<bool(const string &filename, void *data, unsigned char *pixels)> builtin_image_pixels_cb;
-       boost::function<bool(const string &filename, void *data, float *pixels)> builtin_image_float_pixels_cb;
+       function<void(const string &filename, void *data, bool &is_float, int &width, int &height, int &depth, int &channels)> builtin_image_info_cb;
+       function<bool(const string &filename, void *data, unsigned char *pixels)> builtin_image_pixels_cb;
+       function<bool(const string &filename, void *data, float *pixels)> builtin_image_float_pixels_cb;
 
        struct Image {
                string filename;
@@ -81,7 +105,9 @@ public:
                bool use_alpha;
                bool need_load;
                bool animated;
+               float frame;
                InterpolationType interpolation;
+               ExtensionType extension;
 
                int users;
        };