/*
     File:       QD3DShader.h
 
     Contains:   QuickDraw 3D Shader / Color Routines
 
     Version:    Technology: Quickdraw 3D 1.6
                 Release:    QuickTime 7.3
 
     Copyright:  (c) 2007 (c) 1995-1999 by Apple Computer, Inc., all rights reserved.
 
     Bugs?:      For bug reports, consult the following page on
                 the World Wide Web:
 
                     http://developer.apple.com/bugreporter/
 
*/
#ifndef __QD3DSHADER__
#define __QD3DSHADER__

#ifndef __QD3D__
#include <QD3D.h>
#endif

#ifndef __MOVIES__
#include <Movies.h>
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=power
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
    #pragma pack(2)
#endif

#if PRAGMA_ENUM_ALWAYSINT
    #if defined(__fourbyteints__) && !__fourbyteints__ 
        #define __QD3DSHADER__RESTORE_TWOBYTEINTS
        #pragma fourbyteints on
    #endif
    #pragma enumsalwaysint on
#elif PRAGMA_ENUM_OPTIONS
    #pragma option enum=int
#elif PRAGMA_ENUM_PACK
    #if __option(pack_enums)
        #define __QD3DSHADER__RESTORE_PACKED_ENUMS
        #pragma options(!pack_enums)
    #endif
#endif

/******************************************************************************
 **                                                                          **
 **                             RGB Color routines                           **
 **                                                                          **
 *****************************************************************************/
#if CALL_NOT_IN_CARBON
/*
 *  Q3ColorRGB_Set()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Set(
  TQ3ColorRGB *  color,
  float          r,
  float          g,
  float          b);


/*
 *  Q3ColorARGB_Set()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorARGB * )
Q3ColorARGB_Set(
  TQ3ColorARGB *  color,
  float           a,
  float           r,
  float           g,
  float           b);


/*
 *  Q3ColorRGB_Add()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Add(
  const TQ3ColorRGB *  c1,
  const TQ3ColorRGB *  c2,
  TQ3ColorRGB *        result);


/*
 *  Q3ColorRGB_Subtract()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Subtract(
  const TQ3ColorRGB *  c1,
  const TQ3ColorRGB *  c2,
  TQ3ColorRGB *        result);


/*
 *  Q3ColorRGB_Scale()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Scale(
  const TQ3ColorRGB *  color,
  float                scale,
  TQ3ColorRGB *        result);


/*
 *  Q3ColorRGB_Clamp()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Clamp(
  const TQ3ColorRGB *  color,
  TQ3ColorRGB *        result);


/*
 *  Q3ColorRGB_Lerp()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Lerp(
  const TQ3ColorRGB *  first,
  const TQ3ColorRGB *  last,
  float                alpha,
  TQ3ColorRGB *        result);


/*
 *  Q3ColorRGB_Accumulate()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ColorRGB * )
Q3ColorRGB_Accumulate(
  const TQ3ColorRGB *  src,
  TQ3ColorRGB *        result);


#endif  /* CALL_NOT_IN_CARBON */

#if CALL_NOT_IN_CARBON
/*
 *  Q3ColorRGB_Luminance()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( float * )
Q3ColorRGB_Luminance(
  const TQ3ColorRGB *  color,
  float *              luminance);


#endif  /* CALL_NOT_IN_CARBON */

/******************************************************************************
 **                                                                          **
 **                             Shader Types                                 **
 **                                                                          **
 *****************************************************************************/
enum TQ3ShaderUVBoundary {
  kQ3ShaderUVBoundaryWrap       = 0,
  kQ3ShaderUVBoundaryClamp      = 1
};
typedef enum TQ3ShaderUVBoundary TQ3ShaderUVBoundary;


/******************************************************************************
 **                                                                          **
 **                             Shader Routines                              **
 **                                                                          **
 *****************************************************************************/
#if CALL_NOT_IN_CARBON
/*
 *  Q3Shader_GetType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3Shader_GetType(TQ3ShaderObject shader);


/*
 *  Q3Shader_Submit()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_Submit(
  TQ3ShaderObject   shader,
  TQ3ViewObject     view);


/*
 *  Q3Shader_SetUVTransform()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_SetUVTransform(
  TQ3ShaderObject       shader,
  const TQ3Matrix3x3 *  uvTransform);


/*
 *  Q3Shader_GetUVTransform()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_GetUVTransform(
  TQ3ShaderObject   shader,
  TQ3Matrix3x3 *    uvTransform);


/*
 *  Q3Shader_SetUBoundary()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_SetUBoundary(
  TQ3ShaderObject       shader,
  TQ3ShaderUVBoundary   uBoundary);


/*
 *  Q3Shader_SetVBoundary()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_SetVBoundary(
  TQ3ShaderObject       shader,
  TQ3ShaderUVBoundary   vBoundary);


/*
 *  Q3Shader_GetUBoundary()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_GetUBoundary(
  TQ3ShaderObject        shader,
  TQ3ShaderUVBoundary *  uBoundary);


/*
 *  Q3Shader_GetVBoundary()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shader_GetVBoundary(
  TQ3ShaderObject        shader,
  TQ3ShaderUVBoundary *  vBoundary);



/******************************************************************************
 **                                                                          **
 **                         Illumination Shader Classes                      **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3IlluminationShader_GetType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3IlluminationShader_GetType(TQ3ShaderObject shader);


/*
 *  Q3PhongIllumination_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ShaderObject )
Q3PhongIllumination_New(void);


/*
 *  Q3LambertIllumination_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ShaderObject )
Q3LambertIllumination_New(void);


/*
 *  Q3NULLIllumination_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ShaderObject )
Q3NULLIllumination_New(void);



/******************************************************************************
 **                                                                          **
 **                              Surface Shader                              **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3SurfaceShader_GetType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3SurfaceShader_GetType(TQ3SurfaceShaderObject shader);



/******************************************************************************
 **                                                                          **
 **                             Texture Shader                               **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3TextureShader_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ShaderObject )
Q3TextureShader_New(TQ3TextureObject texture);


/*
 *  Q3TextureShader_GetTexture()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3TextureShader_GetTexture(
  TQ3ShaderObject     shader,
  TQ3TextureObject *  texture);


/*
 *  Q3TextureShader_SetTexture()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3TextureShader_SetTexture(
  TQ3ShaderObject    shader,
  TQ3TextureObject   texture);



/******************************************************************************
 **                                                                          **
 **                             Texture Objects                              **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3Texture_GetType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3Texture_GetType(TQ3TextureObject texture);


/*
 *  Q3Texture_GetWidth()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Texture_GetWidth(
  TQ3TextureObject   texture,
  unsigned long *    width);


/*
 *  Q3Texture_GetHeight()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Texture_GetHeight(
  TQ3TextureObject   texture,
  unsigned long *    height);



/******************************************************************************
 **                                                                          **
 **                             Pixmap Texture                               **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3PixmapTexture_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3TextureObject )
Q3PixmapTexture_New(const TQ3StoragePixmap * pixmap);


/*
 *  Q3PixmapTexture_GetPixmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3PixmapTexture_GetPixmap(
  TQ3TextureObject    texture,
  TQ3StoragePixmap *  pixmap);


/*
 *  Q3PixmapTexture_SetPixmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3PixmapTexture_SetPixmap(
  TQ3TextureObject          texture,
  const TQ3StoragePixmap *  pixmap);



/******************************************************************************
 **                                                                          **
 **                             Mipmap Texture                               **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3MipmapTexture_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3TextureObject )
Q3MipmapTexture_New(const TQ3Mipmap * mipmap);


/*
 *  Q3MipmapTexture_GetMipmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3MipmapTexture_GetMipmap(
  TQ3TextureObject   texture,
  TQ3Mipmap *        mipmap);


/*
 *  Q3MipmapTexture_SetMipmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3MipmapTexture_SetMipmap(
  TQ3TextureObject   texture,
  const TQ3Mipmap *  mipmap);


/******************************************************************************
 **                                                                          **
 **                 Compressed Pixmap Texture                                **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3CompressedPixmapTexture_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3TextureObject )
Q3CompressedPixmapTexture_New(const TQ3CompressedPixmap * compressedPixmap);


/*
 *  Q3CompressedPixmapTexture_GetCompressedPixmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3CompressedPixmapTexture_GetCompressedPixmap(
  TQ3TextureObject       texture,
  TQ3CompressedPixmap *  compressedPixmap);


/*
 *  Q3CompressedPixmapTexture_SetCompressedPixmap()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3CompressedPixmapTexture_SetCompressedPixmap(
  TQ3TextureObject             texture,
  const TQ3CompressedPixmap *  compressedPixmap);


/*
 *  Q3CompressedPixmapTexture_CompressImage()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3CompressedPixmapTexture_CompressImage(
  TQ3CompressedPixmap *  compressedPixmap,
  PixMapHandle           sourcePixMap,
  CodecType              codecType,
  CodecComponent         codecComponent,
  short                  codedDepth,
  CodecQ                 codecQuality);







#endif  /* CALL_NOT_IN_CARBON */


#if PRAGMA_ENUM_ALWAYSINT
    #pragma enumsalwaysint reset
    #ifdef __QD3DSHADER__RESTORE_TWOBYTEINTS
        #pragma fourbyteints off
    #endif
#elif PRAGMA_ENUM_OPTIONS
    #pragma option enum=reset
#elif defined(__QD3DSHADER__RESTORE_PACKED_ENUMS)
    #pragma options(pack_enums)
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __QD3DSHADER__ */