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
00027 #ifndef ARBREG_HPP
00028 #define ARBREG_HPP
00029
00030 #include <string>
00031 #include <iosfwd>
00032
00033 #include "ShRefCount.hpp"
00034
00035 namespace shgl {
00036
00039 enum ArbRegType {
00040 SH_ARB_REG_ATTRIB,
00041 SH_ARB_REG_PARAM,
00042 SH_ARB_REG_TEMP,
00043 SH_ARB_REG_HALF_TEMP,
00044 SH_ARB_REG_ADDRESS,
00045 SH_ARB_REG_OUTPUT,
00046 SH_ARB_REG_CONST,
00047 SH_ARB_REG_TEXTURE
00048 };
00049
00052 enum ArbRegBinding {
00053
00054
00055 SH_ARB_REG_PROGRAMLOC,
00056 SH_ARB_REG_PROGRAMENV,
00057 SH_ARB_REG_STATE,
00058
00059 SH_ARB_REG_RESULTCOL,
00060
00061
00062
00063 SH_ARB_REG_VERTEXPOS,
00064 SH_ARB_REG_VERTEXWGT,
00065 SH_ARB_REG_VERTEXNRM,
00066 SH_ARB_REG_VERTEXCOL,
00067 SH_ARB_REG_VERTEXFOG,
00068 SH_ARB_REG_VERTEXTEX,
00069 SH_ARB_REG_VERTEXMAT,
00070 SH_ARB_REG_VERTEXATR,
00071
00072 SH_ARB_REG_RESULTPOS,
00073 SH_ARB_REG_RESULTFOG,
00074 SH_ARB_REG_RESULTPTS,
00075 SH_ARB_REG_RESULTTEX,
00076
00077
00078
00079 SH_ARB_REG_FRAGMENTCOL,
00080 SH_ARB_REG_FRAGMENTTEX,
00081 SH_ARB_REG_FRAGMENTFOG,
00082 SH_ARB_REG_FRAGMENTPOS,
00083
00084 SH_ARB_REG_RESULTDPT,
00085
00086 SH_ARB_REG_NONE
00087 };
00088
00091 struct ArbReg : public SH::ShRefCountable {
00092 ArbReg();
00093 ArbReg(ArbRegType type, int index, std::string name = "");
00094
00095 ArbRegType type;
00096 int index;
00097 std::string name;
00098
00099 struct BindingInfo
00100 {
00101 ArbRegBinding type;
00102 int index;
00103 int count;
00104 std::string name;
00105 float values[4];
00106 };
00107 BindingInfo binding;
00108
00109 friend std::ostream& operator<<(std::ostream& out, const ArbReg& reg);
00110
00112 std::ostream& printDecl(std::ostream& out) const;
00113 };
00114
00115
00116 }
00117
00118 #endif