00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "progShader.h"
00030 #include "fragProgARB.h"
00031 #include "vertexProgARB.h"
00032 #include <iostream>
00033 #include <fstream>
00034 #include <string>
00035
00036
00037 using namespace std;
00038
00039 namespace glift {
00040
00041
00042
00043
00044 ProgShaderSP getProgShaderFromFile(const char *fileName, std::ostream *es)
00045 {
00046
00047 ifstream f(fileName);
00048 string stxt;
00049
00050 f >> stxt;
00051 f.close();
00052
00053
00054 if(stxt.find("!!ARBfp1.0") >= 0)
00055 {
00056 FragProgARB *fp = new FragProgARB(fileName,true,0,true);
00057
00058 ostream *ossave;
00059 if(es)
00060 {
00061
00062 ossave = fp->getErrStream();
00063
00064 fp->setErrStream(es);
00065 }
00066
00067 fp->init();
00068
00069
00070 if(es)
00071 {
00072 fp->setErrStream(ossave);
00073 }
00074
00075 return ProgShaderSP((ProgShader*)fp);
00076
00077 }
00078
00079 else if(stxt.find("!!ARBvp1.0") >= 0)
00080 {
00081 VertexProgARB *vp = new VertexProgARB(fileName,true,0,true);
00082
00083 ostream *ossave;
00084 if(es)
00085 {
00086
00087 ossave = vp->getErrStream();
00088
00089 vp->setErrStream(es);
00090 }
00091
00092 vp->init();
00093
00094
00095 if(es)
00096 {
00097 vp->setErrStream(ossave);
00098 }
00099
00100 return ProgShaderSP((ProgShader*)vp);
00101 }
00102
00103
00104 return ProgShaderSP(0);
00105 }
00106
00107
00108
00109
00110 ProgShaderSP getProgShaderFromText(const char *progText, std::ostream *es)
00111 {
00112 string stxt(progText);
00113
00114
00115 if(stxt.find("!!ARBfp1.0") >= 0)
00116 {
00117 FragProgARB *fp = new FragProgARB(progText,false,0,true);
00118
00119 ostream *ossave;
00120 if(es)
00121 {
00122
00123 ossave = fp->getErrStream();
00124
00125 fp->setErrStream(es);
00126 }
00127
00128 fp->init();
00129
00130
00131 if(es)
00132 {
00133 fp->setErrStream(ossave);
00134 }
00135
00136 return ProgShaderSP((ProgShader*)fp);
00137
00138 }
00139
00140 else if(stxt.find("!!ARBvp1.0") >= 0)
00141 {
00142 VertexProgARB *vp = new VertexProgARB(progText,false,0,true);
00143
00144 ostream *ossave;
00145 if(es)
00146 {
00147
00148 ossave = vp->getErrStream();
00149
00150 vp->setErrStream(es);
00151 }
00152
00153 vp->init();
00154
00155
00156 if(es)
00157 {
00158 vp->setErrStream(ossave);
00159 }
00160
00161 return ProgShaderSP((ProgShader*)vp);
00162 }
00163
00164 return ProgShaderSP(0);
00165 }
00166
00167 }
00168