/*********************************************************************NVMH3**** File: $Id: //sw/devtools/FXComposer2/Alpha4+/SDK/MEDIA/CgFX1.4/debug_tools.cgh#1 $ Copyright NVIDIA Corporation 2005 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Comments: Some functions and macros that are commonly used in debugging shaders, surfaces, models, etc. $Date: 2006/04/10 $ This file uses the QUAD_REAL data type inherited from quad.cgh. By default this is a "half" FP16 type but if you "#define QUAD_FLOAT" before reading this file, it will use FP32 "float" ******************************************************************************/ #ifndef _DEBUG_TOOLS_CGH_ #define _DEBUG_TOOLS_CGH_ // data types, screen-spaced values #include // stripe texture, functions, checkers #include // //////// instead of typical spherical normalization, project against the boundaries of a cube // QUAD_REAL3 cube_normalize(QUAD_REAL3 V) { QUAD_REAL3 Na = abs(V); QUAD_REAL r = max(max(Na.x,Na.y),Na.z); return (V/r); } QUAD_REAL3 cube_normalize(QUAD_REAL4 V) { return cube_normalize(V.xyz); } /////////// vectors into colors ///////////// // normalized vector (saturated, at least) as a color QUAD_REAL3 as_rgb(QUAD_REAL3 V) { return (QUAD_REAL3(0.5,0.5,0.5) + 0.5*V); } QUAD_REAL3 as_rgb(QUAD_REAL4 V) { return as_rgb(V.xyz); } // un-normalized vector (spherical normalize) QUAD_REAL3 as_rgb_n(QUAD_REAL3 V) { return (QUAD_REAL3(0.5,0.5,0.5) + 0.5*normalize(V)); } QUAD_REAL3 as_rgb_n(QUAD_REAL4 V) { return (QUAD_REAL3(0.5,0.5,0.5) + 0.5*normalize(V.xyz)); } // un-normalized vector (cube normalize) QUAD_REAL3 as_rgb_cn(QUAD_REAL3 V) { return (QUAD_REAL3(0.5,0.5,0.5) + 0.5*cube_normalize(V)); } QUAD_REAL3 as_rgb_cn(QUAD_REAL4 V) { return (QUAD_REAL3(0.5,0.5,0.5) + 0.5*cube_normalize(V.xyz)); } // return RGBA instead of RGB ///////// // normalized vector (saturated, at least) as a color QUAD_REAL4 as_rgba(QUAD_REAL3 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*V.xyz),1.0); } QUAD_REAL4 as_rgba(QUAD_REAL4 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*V.xyz),V.w); } // un-normalized vector (spherical normalize) QUAD_REAL4 as_rgba_n(QUAD_REAL3 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*normalize(V.xyz)),1.0); } QUAD_REAL4 as_rgba_n(QUAD_REAL4 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*normalize(V.xyz)),V.w); } // un-normalized vector (cube normalize) QUAD_REAL4 as_rgba_cn(QUAD_REAL3 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*cube_normalize(V.xyz)),1.0); } QUAD_REAL4 as_rgba_cn(QUAD_REAL4 V) { return QUAD_REAL4((QUAD_REAL3(0.5,0.5,0.5) + 0.5*cube_normalize(V.xyz)),V.w); } #endif /* _DEBUG_TOOLS_CGH_ */ /***************************** eof ***/