136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //---------------------------------------------------------------------------//
 | |
| // Copyright (c) 2013-2015 Kyle Lutz <kyle.r.lutz@gmail.com>
 | |
| //
 | |
| // Distributed under the Boost Software License, Version 1.0
 | |
| // See accompanying file LICENSE_1_0.txt or copy at
 | |
| // http://www.boost.org/LICENSE_1_0.txt
 | |
| //
 | |
| // See http://boostorg.github.com/compute for more information.
 | |
| //---------------------------------------------------------------------------//
 | |
| 
 | |
| #ifndef BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP
 | |
| #define BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP
 | |
| 
 | |
| #include <boost/compute/cl.hpp>
 | |
| 
 | |
| namespace boost {
 | |
| namespace compute {
 | |
| 
 | |
| /// \class image_format
 | |
| /// \brief A OpenCL image format
 | |
| ///
 | |
| /// For example, to create a format for a 8-bit RGBA image:
 | |
| /// \code
 | |
| /// boost::compute::image_format rgba8(CL_RGBA, CL_UNSIGNED_INT8);
 | |
| /// \endcode
 | |
| ///
 | |
| /// After being constructed, image_format objects are usually passed to the
 | |
| /// constructor of the various image classes (e.g. \ref image2d, \ref image3d)
 | |
| /// to create an image object on a compute device.
 | |
| ///
 | |
| /// Image formats supported by a context can be queried with the static
 | |
| /// get_supported_formats() in each image class. For example:
 | |
| /// \code
 | |
| /// std::vector<image_format> formats = image2d::get_supported_formats(ctx);
 | |
| /// \endcode
 | |
| ///
 | |
| /// \see image2d
 | |
| class image_format
 | |
| {
 | |
| public:
 | |
|     enum channel_order {
 | |
|         r = CL_R,
 | |
|         a = CL_A,
 | |
|         intensity = CL_INTENSITY,
 | |
|         luminance = CL_LUMINANCE,
 | |
|         rg = CL_RG,
 | |
|         ra = CL_RA,
 | |
|         rgb = CL_RGB,
 | |
|         rgba = CL_RGBA,
 | |
|         argb = CL_ARGB,
 | |
|         bgra = CL_BGRA
 | |
|     };
 | |
| 
 | |
|     enum channel_data_type {
 | |
|         snorm_int8 = CL_SNORM_INT8,
 | |
|         snorm_int16 = CL_SNORM_INT16,
 | |
|         unorm_int8 = CL_UNORM_INT8,
 | |
|         unorm_int16 = CL_UNORM_INT16,
 | |
|         unorm_short_565 = CL_UNORM_SHORT_565,
 | |
|         unorm_short_555 = CL_UNORM_SHORT_555,
 | |
|         unorm_int_101010 = CL_UNORM_INT_101010,
 | |
|         signed_int8 = CL_SIGNED_INT8,
 | |
|         signed_int16 = CL_SIGNED_INT16,
 | |
|         signed_int32 = CL_SIGNED_INT32,
 | |
|         unsigned_int8 = CL_UNSIGNED_INT8,
 | |
|         unsigned_int16 = CL_UNSIGNED_INT16,
 | |
|         unsigned_int32 = CL_UNSIGNED_INT32,
 | |
|         float16 = CL_HALF_FLOAT,
 | |
|         float32 = CL_FLOAT
 | |
|     };
 | |
| 
 | |
|     /// Creates a new image format object with \p order and \p type.
 | |
|     explicit image_format(cl_channel_order order, cl_channel_type type)
 | |
|     {
 | |
|         m_format.image_channel_order = order;
 | |
|         m_format.image_channel_data_type = type;
 | |
|     }
 | |
| 
 | |
|     /// Creates a new image format object from \p format.
 | |
|     explicit image_format(const cl_image_format &format)
 | |
|     {
 | |
|         m_format.image_channel_order = format.image_channel_order;
 | |
|         m_format.image_channel_data_type = format.image_channel_data_type;
 | |
|     }
 | |
| 
 | |
|     /// Creates a new image format object as a copy of \p other.
 | |
|     image_format(const image_format &other)
 | |
|         : m_format(other.m_format)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     /// Copies the format from \p other to \c *this.
 | |
|     image_format& operator=(const image_format &other)
 | |
|     {
 | |
|         if(this != &other){
 | |
|             m_format = other.m_format;
 | |
|         }
 | |
| 
 | |
|         return *this;
 | |
|     }
 | |
| 
 | |
|     /// Destroys the image format object.
 | |
|     ~image_format()
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     /// Returns a pointer to the \c cl_image_format object.
 | |
|     const cl_image_format* get_format_ptr() const
 | |
|     {
 | |
|         return &m_format;
 | |
|     }
 | |
| 
 | |
|     /// Returns \c true if \c *this is the same as \p other.
 | |
|     bool operator==(const image_format &other) const
 | |
|     {
 | |
|         return m_format.image_channel_order ==
 | |
|                    other.m_format.image_channel_order &&
 | |
|                m_format.image_channel_data_type ==
 | |
|                    other.m_format.image_channel_data_type;
 | |
|     }
 | |
| 
 | |
|     /// Returns \c true if \c *this is not the same as \p other.
 | |
|     bool operator!=(const image_format &other) const
 | |
|     {
 | |
|         return !(*this == other);
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     cl_image_format m_format;
 | |
| };
 | |
| 
 | |
| } // end compute namespace
 | |
| } // end boost namespace
 | |
| 
 | |
| #endif // BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP
 | 
