Changeset 30950 in project


Ignore:
Timestamp:
06/02/14 19:00:39 (6 years ago)
Author:
svnwiki
Message:

Anonymous wiki edit for IP [184.69.75.214]: Updated with Alex's excellent additions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wiki/eggref/4/soil

    r25815 r30950  
     1
     2
    13[[tags: egg soil image opengl gl bmp tga dds png jpg game]]
    24
     
    911== Disclaimer
    1012
    11 For now, the egg is available at:
    12 https://github.com/dleslie/soil-egg
     13For now, the egg is available at: https://github.com/dleslie/soil-egg
    1314
    1415The interface adheres closely to the stock SOIL interface.
     
    1819== SOIL Overview
    1920
    20 SOIL is a tiny c library for uploading images as textures into OpenGL.  Also saving and loading of images is supported.
    21 
    22 It uses Sean's Tool Box image loader as a base:
    23 http://www.nothings.org/
     21SOIL is a tiny c library for uploading images as textures into OpenGL. Also saving and loading of images is supported.
     22
     23It uses Sean's Tool Box image loader as a base: http://www.nothings.org/
    2424
    2525SOIL upgrades stb_image to load TGA and DDS files, and adds a direct path for loading DDS files straight into OpenGL textures, when applicable.
    2626
    27 Image Formats:
    28 ; BMP : load and save
    29 ; TGA : load and save
    30 ; DDS : load and save
    31 ; PNG : load
    32 ; JPG : load
     27Image Formats: ; BMP : load and save ; TGA : load and save ; DDS : load and save ; PNG : load ; JPG : load
    3328
    3429OpenGL Texture Features:
    35 * resample to power-of-two sizes
    36 * MIPmap generation
    37 * compressed texture S3TC formats (if supported)
    38 * can pre-multiply alpha for you, for better compositing
    39 * can flip image about the y-axis (except pre-compressed DDS files)
     30
     31    resample to power-of-two sizes
     32    MIPmap generation
     33    compressed texture S3TC formats (if supported)
     34    can pre-multiply alpha for you, for better compositing
     35    can flip image about the y-axis (except pre-compressed DDS files)
    4036
    4137Thanks to:
    42 * Sean Barret - for the awesome stb_image
    43 * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts
    44 * everybody at gamedev.net
    45 * Jonathan Dummer for writing SOIL
     38
     39    Sean Barret - for the awesome stb_image
     40    Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts
     41    everybody at gamedev.net
     42    Jonathan Dummer for writing SOIL
    4643
    4744== Reference
     
    5350The format of images that may be loaded.
    5451
    55 <constant>force-channels/auto</constant>
     52force-channels/auto
    5653
    5754Leaves the image in whatever format it was found.
    5855
    59 <constant>force-channels/luminous</constant>
     56force-channels/luminous
    6057
    6158Forces the image to load as Luminous (greyscale).
    6259
    63 <constant>force-channels/luminous-alpha</constant>
     60force-channels/luminous-alpha
    6461
    6562Forces the image to load as Luminous with Alpha.
    6663
    67 <constant>force-channels/rgb</constant>
     64force-channels/rgb
    6865
    6966Forces the image to load as Red Green Blue.
    7067
    71 <constant>force-channels/rgba</constant>
     68force-channels/rgba
    7269
    7370Forces the image to load as Red Green Blue Alpha.
     
    7572==== Texture Creation
    7673
    77 <constant>texture-id/create-new-id</constant>
     74texture-id/create-new-id
    7875
    7976Passed in as reuse-texture-id, and will cause SOIL to register a new texture ID using glGenTextures(). If the value passed into reuse-texture-id > 0 then SOIL will just reuse that texture ID (great for reloading image assets in-game).
     
    8178==== OpenGL Texture Format
    8279
    83 <constant>texture/power-of-two</constant>
     80texture/power-of-two
    8481
    8582Force the image to be power-of-two.
    8683
    87 <constant>texture/mipmaps</constant>
     84texture/mipmaps
    8885
    8986Generate mipmaps for the texture.
    9087
    91 <constant>texture/repeats</constant>
     88texture/repeats
    9289
    9390Sets the image to repeating, otherwise it will be clamped.
    9491
    95 <constant>texture/multiply-alpha</constant>
     92texture/multiply-alpha
    9693
    9794For when using (GL_ONE, GL_ONE_MINUS_SRC_ALPHA) blending.
    9895
    99 <constant>texture/invert-y</constant>
     96texture/invert-y
    10097
    10198Flip the image vertically.
    10299
    103 <constant>texture/compress</constant>
     100texture/compress
    104101
    105102If the card supports it this will convert RGB to DXT1, and RGBA to DXT5.
    106103
    107 <constant>texture/dds-direct</constant>
     104texture/dds-direct
    108105
    109106Will load DDS files directly without any additional processing.
    110107
    111 <constant>texture/ntsc-safe-rgb</constant>
     108texture/ntsc-safe-rgb
    112109
    113110Clamps RGB components to the NTSC GL safe range.
    114111
    115 <constant>texture/cogo-y</constant>
     112texture/cogo-y
    116113
    117114RGB becomes CoYCg and RGBA becomes CoCgAY.
    118115
    119 <constant>texture/rectangle</constant>
     116texture/rectangle
    120117
    121118Uses ARB_texture_rectangle; generates pixedl indexed with no repeat, mip maps or cube maps.
     
    123120==== Saving File Formats
    124121
    125 <constant>save-type/tga</constant>
     122save-type/tga
    126123
    127124TGA format in uncompressed RGBA or RGB.
    128125
    129 <constant>save-type/bmp</constant>
     126save-type/bmp
    130127
    131128BMP format in uncompressed RGB
    132129
    133 <constant>save-type/dds</constant>
     130save-type/dds
    134131
    135132DDS format in DXT1 or DXT5
     
    137134==== Cube Maps
    138135
    139 <constant>dds-cubemap-face-order</constant>
     136dds-cubemap-face-order
    140137
    141138The current face order as defined in the C preprocessor. Defaults to EWUDNS. In order to reorder this you will need to define SOIL_DDS_CUBEMAP_FACE_ORDER in the C preprocessor, likely in the #> <# header block of the appropriate scheme source file.
     
    143140==== Internal HDR Representations
    144141
    145 <constant>fake-hdr/rgbe</constant>
     142fake-hdr/rgbe
    146143
    147144RGB * pow( 2.0, A - 128.0)
    148145
    149 <constant>fake-hdr/rgb-div-alpha</constant>
     146fake-hdr/rgb-div-alpha
    150147
    151148RGB / A
    152149
    153 <constant>fake-hdr/rgb-div-alpha-squared</constant>
     150fake-hdr/rgb-div-alpha-squared
    154151
    155152RGB / (A * A)
     
    157154=== Functions
    158155
    159 <procedure>(load-ogl-texture filename force-channels texture-id texture-flags)</procedure>
     156(load-ogl-texture filename force-channels texture-id texture-flags)
    160157
    161158Loads an image from disk into an OpenGL texture.
    162159
    163 <parameter>filename</parameter> Name of the file to load
    164 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    165 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    166 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    167 
    168 Returns an OpenGL texture-id.
    169 
    170 <procedure>(load-ogl-cubemap xpos-file xneg-file ypos-file yneg-file zpos-file zneg-file force-channels texture-id texture-flags)</procedure>
     160filename Name of the file to load force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     161
     162Returns an OpenGL texture-id.
     163
     164(load-ogl-cubemap xpos-file xneg-file ypos-file yneg-file zpos-file zneg-file force-channels texture-id texture-flags)
    171165
    172166Loads a cubemap texture from disc.
    173167
    174 <parameter>xpos-file</parameter> File to load for the +x cube face
    175 <parameter>xneg-file</parameter> File to load for the -x cube face
    176 <parameter>ypos-file</parameter> File to load for the +y cube face
    177 <parameter>yneg-file</parameter> File to load for the -y cube face
    178 <parameter>zpos-file</parameter> File to load for the +z cube face
    179 <parameter>zneg-file</parameter> File to load for the -z cube face
    180 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    181 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    182 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    183 
    184 Returns an OpenGL texture-id.
    185 
    186 <procedure>(load-ogl-single-cubemap filename face-order force-channels texture-id texture-flags)</procedure>
     168xpos-file File to load for the +x cube face xneg-file File to load for the -x cube face ypos-file File to load for the +y cube face yneg-file File to load for the -y cube face zpos-file File to load for the +z cube face zneg-file File to load for the -z cube face force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     169
     170Returns an OpenGL texture-id.
     171
     172(load-ogl-single-cubemap filename face-order force-channels texture-id texture-flags)
    187173
    188174Loads a single image from disc and splits it into an OpenGL cubemap texture.
    189175
    190 <parameter>filename</parameter> File to load and split into the texture
    191 <parameter>face-order</parameter> The order of the faces in the file, any combination of NSWEUD
    192 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    193 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    194 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    195 
    196 Returns an OpenGL texture-id.
    197 
    198 <procedure>(load-ogl-hdr-texture filename hdr-format rescale-to-max texture-id texture-flags)</procedure>
     176filename File to load and split into the texture face-order The order of the faces in the file, any combination of NSWEUD force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     177
     178Returns an OpenGL texture-id.
     179
     180(load-ogl-hdr-texture filename hdr-format rescale-to-max texture-id texture-flags)
    199181
    200182Loads an HDR image from disk into an OpenGL texture.
    201183
    202 <parameter>filename</parameter> File to load and split into the texture
    203 <parameter>hdr-format</parameter> One of the fake-hdr/* flags, IE, fake-hdr/rgbe
    204 <parameter>rescale-to-max</parameter> If true, rescales the image to max
    205 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    206 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    207 
    208 Returns an OpenGL texture-id.
    209 
    210 <procedure>(load-ogl-texture-from-memory buffer length force-channels texture-id texture-flags)</procedure>
     184filename File to load and split into the texture hdr-format One of the fake-hdr/* flags, IE, fake-hdr/rgbe rescale-to-max If true, rescales the image to max texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     185
     186Returns an OpenGL texture-id.
     187
     188(load-ogl-texture-from-memory buffer length force-channels texture-id texture-flags)
    211189
    212190Loads an image from memory into an OpenGL texture.
    213191
    214 <parameter>buffer</parameter> The blob from which the image should be loaded
    215 <parameter>length</parameter> The length, in bytes, to read from the blob
    216 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    217 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    218 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    219 
    220 Returns an OpenGL texture-id.
    221 
    222 <procedure>(load-ogl-cubemap-from-memory xpos-buffer xpos-length xneg-buffer xneg-length ypos-buffer ypos-length yneg-buffer yneg-length zpos-buffer zpos-length zneg-buffer zneg-length force-channels texture-id texture-flags)</procedure>
     192buffer The blob from which the image should be loaded length The length, in bytes, to read from the blob force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     193
     194Returns an OpenGL texture-id.
     195
     196(load-ogl-cubemap-from-memory xpos-buffer xpos-length xneg-buffer xneg-length ypos-buffer ypos-length yneg-buffer yneg-length zpos-buffer zpos-length zneg-buffer zneg-length force-channels texture-id texture-flags)
    223197
    224198Loads a cubemap texture from memory.
    225199
    226 <parameter>xpos-buffer</parameter> Buffer to load for the +x cube face
    227 <parameter>xpos-length</parameter> Size, in bytes, to read from xpos-buffer
    228 <parameter>xneg-buffer</parameter> Buffer to load for the -x cube face
    229 <parameter>xneg-length</parameter> Size, in bytes, to read from xneg-buffer
    230 <parameter>ypos-buffer</parameter> Buffer to load for the +y cube face
    231 <parameter>ypos-length</parameter> Size, in bytes, to read from ypos-buffer
    232 <parameter>yneg-buffer</parameter> Buffer to load for the -y cube face
    233 <parameter>yneg-length</parameter> Size, in bytes, to read from yneg-buffer
    234 <parameter>zpos-buffer</parameter> Buffer to load for the +z cube face
    235 <parameter>zpos-length</parameter> Size, in bytes, to read from zpos-buffer
    236 <parameter>zneg-buffer</parameter> Buffer to load for the -z cube face
    237 <parameter>zneg-length</parameter> Size, in bytes, to read from zneg-buffer
    238 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    239 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    240 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    241 
    242 Returns an OpenGL texture-id.
    243 
    244 <procedure>(load-ogl-single-cubemap-from-memory buffer length order force-channels texture-id texture-flags)</procedure>
     200xpos-buffer Buffer to load for the +x cube face xpos-length Size, in bytes, to read from xpos-buffer xneg-buffer Buffer to load for the -x cube face xneg-length Size, in bytes, to read from xneg-buffer ypos-buffer Buffer to load for the +y cube face ypos-length Size, in bytes, to read from ypos-buffer yneg-buffer Buffer to load for the -y cube face yneg-length Size, in bytes, to read from yneg-buffer zpos-buffer Buffer to load for the +z cube face zpos-length Size, in bytes, to read from zpos-buffer zneg-buffer Buffer to load for the -z cube face zneg-length Size, in bytes, to read from zneg-buffer force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     201
     202Returns an OpenGL texture-id.
     203
     204(load-ogl-single-cubemap-from-memory buffer length order force-channels texture-id texture-flags)
    245205
    246206Loads a single image from memory and splits it into an OpenGL cubemap texture.
    247207
    248 <parameter>buffer</parameter> Blob to load and split into the texture
    249 <parameter>length</parameter> Size, in bytes, to read from the blob
    250 <parameter>face-order</parameter> The order of the faces in the file, any combination of NSWEUD
    251 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    252 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    253 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    254 
    255 Returns an OpenGL texture-id.
    256 
    257 <procedure>(create-ogl-texture data width height force-channels texture-id texture-flags)</procedure>
     208buffer Blob to load and split into the texture length Size, in bytes, to read from the blob face-order The order of the faces in the file, any combination of NSWEUD force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     209
     210Returns an OpenGL texture-id.
     211
     212(create-ogl-texture data width height force-channels texture-id texture-flags)
    258213
    259214Creates a 2D OpenGL texture from raw image data. The raw data is not freed after being uploaded. (And it is thus safe to use a blob).
    260215
    261 <parameter>data</parameter> Blob to upload as an OpenGL texture
    262 <parameter>width</parameter> The width of the image in pixels
    263 <parameter>height</parameter> The height of the image in pixels
    264 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    265 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    266 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    267 
    268 Returns an OpenGL texture-id.
    269 
    270 <procedure>(create-ogl-single-cubemap data width height force-channels order texture-id texture-flags)</procedure>
    271 
    272 <parameter>data</parameter> Blob to upload as an OpenGL texture
    273 <parameter>width</parameter> The width of the image in pixels
    274 <parameter>height</parameter> The height of the image in pixels
    275 <parameter>face-order</parameter> The order of the faces in the file, any combination of NSWEUD
    276 <parameter>force-channels</parameter> Format of image channels to force, see above definitions for appropriate values
    277 <parameter>texture-id</parameter> Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture
    278 <parameter>texture-flags</parameter> See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
    279 
    280 Returns an OpenGL texture-id.
    281 
    282 <procedure>(save-screenshot filename save-type x y width height)</procedure>
     216data Blob to upload as an OpenGL texture width The width of the image in pixels height The height of the image in pixels force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     217
     218Returns an OpenGL texture-id.
     219
     220(create-ogl-single-cubemap data width height force-channels order texture-id texture-flags)
     221
     222data Blob to upload as an OpenGL texture width The width of the image in pixels height The height of the image in pixels face-order The order of the faces in the file, any combination of NSWEUD force-channels Format of image channels to force, see above definitions for appropriate values texture-id Use either texture-id/create-new-id or use an existing texture id to overwrite an existing texture texture-flags See above for appropriate texture/* to use, ie, texture/repeats or texture/mipmaps. Flags are bitwise, and can be combined with bitwise-ior
     223
     224Returns an OpenGL texture-id.
     225
     226(save-screenshot filename save-type x y width height)
    283227
    284228Captures the OpenGL window (RGB) and saves it to disk.
    285229
    286 <parameter>filename</parameter> The file to save the image to
    287 <parameter>save-type</parameter> The format to save the image in, one of save-type/*
    288 <parameter>x</parameter> Start x position
    289 <parameter>y</parameter> Start y position
    290 <parameter>width</parameter> Width of image
    291 <parameter>height</parameter> Height of image
     230filename The file to save the image to save-type The format to save the image in, one of save-type/* x Start x position y Start y position width Width of image height Height of image
    292231
    293232Returns #t if succesful.
    294233
    295 <procedure>(last-result)</procedure>
     234(last-result)
    296235
    297236Returns the last error message as a string.
    298237
     238(ogl-texture-width texture)(ogl-texture-height texture)
     239
     240Returns the width and height of the given OpenGL texture.
     241
    299242== Known Issues
    300243
    301 
    302 == Author
     244== Authors
    303245
    304246Dan Leslie (dan@ironoxide.ca)
    305247
     248Alex Charlton (alex.n.charlton@gmail.com)
     249
    306250== Version history
    307251
     252; 1.2 : SOIL source built into egg
     253
     254; 1.1 : Added procedures to retrieve texture size
     255
    308256; 1.0 : First release
    309257
     
    312260Copyright 2012 Daniel J. Leslie. All rights reserved.
    313261
    314 Redistribution and use in source and binary forms, with or without modification, are
    315 permitted provided that the following conditions are met:
    316 
    317    1. Redistributions of source code must retain the above copyright notice, this list of
    318       conditions and the following disclaimer.
    319 
    320    2. Redistributions in binary form must reproduce the above copyright notice, this list
    321       of conditions and the following disclaimer in the documentation and/or other materials
    322       provided with the distribution.
    323 
    324 THIS SOFTWARE IS PROVIDED BY DANIEL J. LESLIE ''AS IS'' AND ANY EXPRESS OR IMPLIED
    325 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    326 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DANIEL J. LESLIE OR
    327 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    328 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    329 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    330 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    331 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    332 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    333 
    334 The views and conclusions contained in the software and documentation are those of the
    335 authors and should not be interpreted as representing official policies, either expressed
    336 or implied, of Daniel J. Leslie.
     262Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
     263
     264    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
     265
     266    Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
     267
     268THIS SOFTWARE IS PROVIDED BY DANIEL J. LESLIE ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DANIEL J. LESLIE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     269
     270The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Daniel J. Leslie.
Note: See TracChangeset for help on using the changeset viewer.