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_ADDRESS,
00044 SH_ARB_REG_OUTPUT,
00045 SH_ARB_REG_CONST,
00046 SH_ARB_REG_TEXTURE
00047 };
00048
00051
enum ArbRegBinding {
00052
00053
00054 SH_ARB_REG_PARAMLOC,
00055 SH_ARB_REG_PARAMENV,
00056
00057 SH_ARB_REG_RESULTCOL,
00058
00059
00060
00061 SH_ARB_REG_VERTEXPOS,
00062 SH_ARB_REG_VERTEXWGT,
00063 SH_ARB_REG_VERTEXNRM,
00064 SH_ARB_REG_VERTEXCOL,
00065 SH_ARB_REG_VERTEXFOG,
00066 SH_ARB_REG_VERTEXTEX,
00067 SH_ARB_REG_VERTEXMAT,
00068 SH_ARB_REG_VERTEXATR,
00069
00070 SH_ARB_REG_RESULTPOS,
00071 SH_ARB_REG_RESULTFOG,
00072 SH_ARB_REG_RESULTPTS,
00073 SH_ARB_REG_RESULTTEX,
00074
00075
00076
00077 SH_ARB_REG_FRAGMENTCOL,
00078 SH_ARB_REG_FRAGMENTTEX,
00079 SH_ARB_REG_FRAGMENTFOG,
00080 SH_ARB_REG_FRAGMENTPOS,
00081
00082 SH_ARB_REG_RESULTDPT,
00083
00084 SH_ARB_REG_NONE
00085 };
00086
00089 struct ArbReg :
public SH::
ShRefCountable {
00090
ArbReg();
00091
ArbReg(ArbRegType type,
int index, std::string name =
"");
00092
00093 ArbRegType type;
00094
int index;
00095 std::string name;
00096
00097
union {
00098
struct {
00099 ArbRegBinding binding;
00100
int bindingIndex;
00101 };
00102
float values[4];
00103 };
00104
00105
friend std::ostream&
operator<<(std::ostream& out,
const ArbReg& reg);
00106
00108 std::ostream&
printDecl(std::ostream& out)
const;
00109 };
00110
00111
00112 }
00113
00114
#endif