]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_statetreetextureitem.cpp
Initial vogl checkin
[vogl] / src / vogleditor / vogleditor_statetreetextureitem.cpp
1 #include "vogleditor_statetreetextureitem.h"
2
3 #include "vogl_texture_state.h"
4
5 void vogleditor_stateTreeTextureItem::set_diff_base_state(const vogl_texture_state* pBaseState) {
6     m_pDiffBaseState = pBaseState;
7     for (vogleditor_stateTreeStateVecDiffableItem** iter = m_diffableItems.begin(); iter != m_diffableItems.end(); iter++)
8     {
9         (*iter)->set_diff_base_state(&(pBaseState->get_params()));
10     }
11 }
12
13 vogleditor_stateTreeTextureItem::vogleditor_stateTreeTextureItem(QString name, QString value, vogleditor_stateTreeItem* parentNode, vogl_texture_state* pState, const vogl_context_info& info)
14    : vogleditor_stateTreeItem(name, value, parentNode),
15      m_pTexture(pState),
16      m_pDiffBaseState(NULL)
17 {
18    QString tmp;
19
20    float fVals[16];
21    int iVals[16];
22
23 #define STR_INT1(val) tmp.sprintf("%d", val[0])
24
25
26 #define GET_INT(name, num) if (m_pTexture->get_params().get<int>(name, 0, iVals, num)) { vogleditor_stateTreeStateVecIntItem* pItem = new vogleditor_stateTreeStateVecIntItem(#name, name, 0, m_pTexture->get_params(), iVals, num, false, this); m_diffableItems.push_back(pItem); this->appendChild(pItem); }
27 #define GET_ENUM(name, num) if (m_pTexture->get_params().get<int>(name, 0, iVals, num)) { vogleditor_stateTreeStateVecEnumItem* pItem = new vogleditor_stateTreeStateVecEnumItem(#name, name, 0, m_pTexture->get_params(), iVals, num, false, this); m_diffableItems.push_back(pItem); this->appendChild(pItem); }
28 #define GET_FLOAT(name, num) if (m_pTexture->get_params().get<float>(name, 0, fVals, num)) { vogleditor_stateTreeStateVecFloatItem* pItem = new vogleditor_stateTreeStateVecFloatItem(#name, name, 0, m_pTexture->get_params(), fVals, num, false, this); m_diffableItems.push_back(pItem); this->appendChild(pItem); }
29                   GET_INT(GL_TEXTURE_BASE_LEVEL, 1);
30                   int base_level = iVals[0];
31                   GET_INT(GL_TEXTURE_MAX_LEVEL, 1);
32                   GET_FLOAT(GL_TEXTURE_BORDER_COLOR, 4);
33                   GET_ENUM(GL_TEXTURE_COMPARE_MODE, 1);
34                   GET_ENUM(GL_TEXTURE_COMPARE_FUNC, 1);
35                   GET_FLOAT(GL_TEXTURE_LOD_BIAS, 1);
36                   GET_ENUM(GL_TEXTURE_MIN_FILTER, 1);
37                   GET_ENUM(GL_TEXTURE_MAG_FILTER, 1);
38                   GET_FLOAT(GL_TEXTURE_MIN_LOD, 1);
39                   GET_FLOAT(GL_TEXTURE_MAX_LOD, 1);
40                   GET_ENUM(GL_TEXTURE_SWIZZLE_R, 1);
41                   GET_ENUM(GL_TEXTURE_SWIZZLE_G, 1);
42                   GET_ENUM(GL_TEXTURE_SWIZZLE_B, 1);
43                   GET_ENUM(GL_TEXTURE_SWIZZLE_A, 1);
44                   GET_ENUM(GL_TEXTURE_SWIZZLE_RGBA, 4);
45                   GET_ENUM(GL_TEXTURE_WRAP_S, 1);
46                   GET_ENUM(GL_TEXTURE_WRAP_T, 1);
47                   GET_ENUM(GL_TEXTURE_WRAP_R, 1);
48
49                   if (!info.is_core_profile())
50                   {
51                      GET_ENUM(GL_GENERATE_MIPMAP, 1);
52                   }
53
54                   GET_INT(GL_TEXTURE_IMMUTABLE_FORMAT, 1);
55
56                   if (info.supports_extension("GL_EXT_texture_filter_anisotropic"))
57                   {
58                      GET_FLOAT(GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
59                   }
60
61                   if (info.supports_extension("GL_EXT_texture_sRGB_decode"))
62                   {
63                      GET_ENUM(GL_TEXTURE_SRGB_DECODE_EXT, 1);
64                   }
65
66                   if (!info.is_core_profile() && info.supports_extension("GL_ARB_shadow_ambient"))
67                   {
68                      GET_FLOAT(GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 1);
69                   }
70
71                   if (!info.is_core_profile())
72                   {
73                      GET_ENUM(GL_DEPTH_TEXTURE_MODE, 1);
74                      // TODO
75                      //GL_TEXTURE_PRIORITY
76                      //GL_TEXTURE_RESIDENT
77                   }
78
79                   int num_actual_levels = m_pTexture->get_num_levels();
80                   uint num_faces = (m_pTexture->get_target() == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
81
82                   for (uint face = 0; face < num_faces; face++)
83                   {
84                      GLenum face_target_to_query = m_pTexture->get_target();
85                      if (m_pTexture->get_target() == GL_TEXTURE_CUBE_MAP)
86                         face_target_to_query = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
87
88                      vogleditor_stateTreeItem* pFaceNode = this;
89
90                      if (m_pTexture->get_target() == GL_TEXTURE_CUBE_MAP)
91                      {
92                         pFaceNode = new vogleditor_stateTreeItem(enum_to_string(face_target_to_query), "", this);
93                         this->appendChild(pFaceNode);
94                      }
95
96                      for (int level = base_level; level < num_actual_levels; level++)
97                      {
98                         vogleditor_stateTreeItem* pLevelNode = new vogleditor_stateTreeItem(tmp.sprintf("Mip level %d", level), "", pFaceNode);
99                         pFaceNode->appendChild(pLevelNode);
100
101                         const vogl_state_vector& level_params = m_pTexture->get_level_params(face, level);
102
103                         // TODO: Check for core vs. compat profiles and not query the old stuff
104 #undef GET_INT
105 #undef GET_ENUM
106 #define GET_INT(name, num) if (level_params.get<int>(name, 0, iVals, num)) { pLevelNode->appendChild(new vogleditor_stateTreeStateVecIntItem(#name, name, 0, level_params, iVals, num, false, pLevelNode)); }
107 #define GET_ENUM(name, num) if (level_params.get<int>(name, 0, iVals, num)) { pLevelNode->appendChild(new vogleditor_stateTreeStateVecEnumItem(#name, name, 0, level_params, iVals, num, false, pLevelNode)); }
108                         GET_INT(GL_TEXTURE_WIDTH, 1);
109                         GET_INT(GL_TEXTURE_HEIGHT, 1);
110                         GET_INT(GL_TEXTURE_DEPTH, 1);
111                         GET_ENUM(GL_TEXTURE_INTERNAL_FORMAT, 1);
112
113                         GET_INT(GL_TEXTURE_SAMPLES, 1);
114                         GET_ENUM(GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, 1);
115
116                         GET_INT(GL_TEXTURE_RED_SIZE, 1);
117                         GET_INT(GL_TEXTURE_GREEN_SIZE, 1);
118                         GET_INT(GL_TEXTURE_BLUE_SIZE, 1);
119                         GET_INT(GL_TEXTURE_ALPHA_SIZE, 1);
120                         GET_INT(GL_TEXTURE_DEPTH_SIZE, 1);
121                         GET_INT(GL_TEXTURE_STENCIL_SIZE, 1);
122                         GET_INT(GL_TEXTURE_LUMINANCE_SIZE, 1);
123                         GET_INT(GL_TEXTURE_INTENSITY_SIZE, 1);
124                         GET_INT(GL_TEXTURE_SHARED_SIZE, 1);
125                         GET_INT(GL_TEXTURE_COMPRESSED, 1);
126                         bool is_compressed = (bool)iVals[0];
127
128                         if (info.supports_extension("GL_ARB_depth_texture"))
129                         {
130                            GET_INT(GL_TEXTURE_DEPTH_SIZE, 1);
131                            GET_INT(GL_TEXTURE_DEPTH_TYPE, 1);
132                         }
133
134                         if (info.supports_extension("GL_EXT_packed_depth_stencil"))
135                            GET_INT(GL_TEXTURE_STENCIL_SIZE_EXT, 1);
136
137                         if (m_pTexture->get_target() == GL_TEXTURE_BUFFER)
138                         {
139                            GET_INT(GL_TEXTURE_BUFFER_DATA_STORE_BINDING, 1);
140                            GET_INT(GL_TEXTURE_BUFFER_OFFSET, 1);
141                            GET_INT(GL_TEXTURE_BUFFER_SIZE, 1);
142                         }
143
144                         if (is_compressed)
145                         {
146                            GET_INT(GL_TEXTURE_COMPRESSED_IMAGE_SIZE, 1);
147                         }
148                      }
149                   }
150 #undef GET_FLOAT
151 #undef GET_ENUM
152 #undef GET_INT
153
154 }