Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/image.h')
-rw-r--r--intern/cycles/render/image.h91
1 files changed, 46 insertions, 45 deletions
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index 494c74f0cdd..5391490d993 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -17,46 +17,46 @@
#ifndef __IMAGE_H__
#define __IMAGE_H__
-#include "device.h"
-#include "device_memory.h"
+#include "device/device.h"
+#include "device/device_memory.h"
-#include "util_image.h"
-#include "util_string.h"
-#include "util_thread.h"
-#include "util_vector.h"
+#include "util/util_image.h"
+#include "util/util_string.h"
+#include "util/util_thread.h"
+#include "util/util_vector.h"
CCL_NAMESPACE_BEGIN
class Device;
-class DeviceScene;
class Progress;
class Scene;
+class ImageMetaData {
+public:
+ /* Must be set by image file or builtin callback. */
+ bool is_float, is_half;
+ int channels;
+ size_t width, height, depth;
+ bool builtin_free_cache;
+
+ /* Automatically set. */
+ ImageDataType type;
+ bool is_linear;
+};
+
class ImageManager {
public:
explicit ImageManager(const DeviceInfo& info);
~ImageManager();
- enum ImageDataType {
- IMAGE_DATA_TYPE_FLOAT4 = 0,
- IMAGE_DATA_TYPE_BYTE4 = 1,
- IMAGE_DATA_TYPE_HALF4 = 2,
- IMAGE_DATA_TYPE_FLOAT = 3,
- IMAGE_DATA_TYPE_BYTE = 4,
- IMAGE_DATA_TYPE_HALF = 5,
-
- IMAGE_DATA_NUM_TYPES
- };
-
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);
+ bool use_alpha,
+ ImageMetaData& metadata);
void remove_image(int flat_slot);
void remove_image(const string& filename,
void *builtin_data,
@@ -68,24 +68,25 @@ public:
InterpolationType interpolation,
ExtensionType extension,
bool use_alpha);
- ImageDataType get_image_metadata(const string& filename, void *builtin_data, bool& is_linear);
+ bool get_image_metadata(const string& filename,
+ void *builtin_data,
+ ImageMetaData& metadata);
void device_update(Device *device,
- DeviceScene *dscene,
Scene *scene,
Progress& progress);
void device_update_slot(Device *device,
- DeviceScene *dscene,
Scene *scene,
int flat_slot,
Progress *progress);
- void device_free(Device *device, DeviceScene *dscene);
- void device_free_builtin(Device *device, DeviceScene *dscene);
+ void device_free(Device *device);
+ void device_free_builtin(Device *device);
void set_osl_texture_system(void *texture_system);
- void set_pack_images(bool pack_images_);
bool set_animation_frame_update(int frame);
+ device_memory *image_memory(int flat_slot);
+
bool need_update;
/* NOTE: Here pixels_size is a size of storage, which equals to
@@ -94,23 +95,22 @@ public:
*/
function<void(const string &filename,
void *data,
- bool &is_float,
- int &width,
- int &height,
- int &depth,
- int &channels)> builtin_image_info_cb;
+ ImageMetaData& metadata)> builtin_image_info_cb;
function<bool(const string &filename,
void *data,
unsigned char *pixels,
- const size_t pixels_size)> builtin_image_pixels_cb;
+ const size_t pixels_size,
+ const bool free_cache)> builtin_image_pixels_cb;
function<bool(const string &filename,
void *data,
float *pixels,
- const size_t pixels_size)> builtin_image_float_pixels_cb;
+ const size_t pixels_size,
+ const bool free_cache)> builtin_image_float_pixels_cb;
struct Image {
string filename;
void *builtin_data;
+ bool builtin_free_cache;
bool use_alpha;
bool need_load;
@@ -119,21 +119,29 @@ public:
InterpolationType interpolation;
ExtensionType extension;
+ string mem_name;
+ device_memory *mem;
+
int users;
};
private:
int tex_num_images[IMAGE_DATA_NUM_TYPES];
- int tex_start_images[IMAGE_DATA_NUM_TYPES];
+ int max_num_images;
+ bool has_half_images;
thread_mutex device_mutex;
int animation_frame;
vector<Image*> images[IMAGE_DATA_NUM_TYPES];
void *osl_texture_system;
- bool pack_images;
- bool file_load_image_generic(Image *img, ImageInput **in, int &width, int &height, int &depth, int &components);
+ bool file_load_image_generic(Image *img,
+ ImageInput **in,
+ int &width,
+ int &height,
+ int &depth,
+ int &components);
template<TypeDesc::BASETYPE FileFormat,
typename StorageType,
@@ -143,26 +151,19 @@ private:
int texture_limit,
device_vector<DeviceType>& tex_img);
+ int max_flattened_slot(ImageDataType type);
int type_index_to_flattened_slot(int slot, ImageDataType type);
int flattened_slot_to_type_index(int flat_slot, ImageDataType *type);
string name_from_type(int type);
- uint8_t pack_image_options(ImageDataType type, size_t slot);
-
void device_load_image(Device *device,
- DeviceScene *dscene,
Scene *scene,
ImageDataType type,
int slot,
Progress *progess);
void device_free_image(Device *device,
- DeviceScene *dscene,
ImageDataType type,
int slot);
-
- void device_pack_images(Device *device,
- DeviceScene *dscene,
- Progress& progess);
};
CCL_NAMESPACE_END