//- // ========================================================================== // Copyright (C) 2005 ATI Technologies Inc. All rights reserved. // // Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright // law and by international treaties. // // The Data is provided for use exclusively by You. You have the right // to use, modify, and incorporate this Data into other products for // purposes authorized by the Autodesk software license agreement, // without fee. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the // following disclaimer, must be included in all copies of the // Software, in whole or in part, and all derivative works of // the Software, unless such copies or derivative works are solely // in the form of machine-executable object code generated by a // source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR // PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR // TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS // BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, // DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK // AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY // OR PROBABILITY OF SUCH DAMAGES. // // ========================================================================== //+ #include "Shader.h" #include "glslFXShader.h" #include "hlslFXShader.h" #include "hlslSm3FXShader.h" std::string shader::sError; bool shader::sSupportSM3 = false; // // ////////////////////////////////////////////////////////////////////// shader* shader::create( const char *filename) { sError.clear(); if (glShadingLanguageSupport && glAsmProgramSupport) { //create an AshliFX for this file and attempt to read it //after parsing, the type can be checked to determine which type of shader node to create IAshliFX *fx = new IAshliFX; fx->init(); fx->setFX( filename); try { if (fx->parse()) { if (fx->getBinding() == IAshliFX::GLSL) { glslFXShader *s = new glslFXShader; s->createFromFX( fx); // Commented out as this causes a access violation. //delete fx; return s; } if (fx->getBinding() == IAshliFX::DXSL) { if ( sSupportSM3) { hlslSm3FXShader *s = new hlslSm3FXShader; s->createFromFX( fx); // Commented out as this causes a access violation. //delete fx; return s; } else { hlslFXShader *s = new hlslFXShader; if (! s->createFromFX( fx)) { sError = s->errorString(); delete s; } else { // Commented out as this causes a access violation. //delete fx; return s; } } } } else { sError = fx->getError(); } } catch(...) { printf("Unexpected Error!!\n"); } delete fx; } //how should we treat an error? there is no convenient way to report an error message return NULL; }