1 #include "vogleditor_statetreetextureitem.h"
3 #include "vogl_texture_state.h"
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++)
9 (*iter)->set_diff_base_state(&(pBaseState->get_params()));
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),
16 m_pDiffBaseState(NULL)
23 #define STR_INT1(val) tmp.sprintf("%d", val[0])
26 #define GET_INT(name, num) memset(iVals, 0, sizeof(iVals)); 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) memset(iVals, 0, sizeof(iVals)); 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) memset(fVals, 0, sizeof(fVals)); 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);
49 if (!info.is_core_profile())
51 GET_ENUM(GL_GENERATE_MIPMAP, 1);
54 GET_INT(GL_TEXTURE_IMMUTABLE_FORMAT, 1);
56 if (info.supports_extension("GL_EXT_texture_filter_anisotropic"))
58 GET_FLOAT(GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
61 if (info.supports_extension("GL_EXT_texture_sRGB_decode"))
63 GET_ENUM(GL_TEXTURE_SRGB_DECODE_EXT, 1);
66 if (!info.is_core_profile() && info.supports_extension("GL_ARB_shadow_ambient"))
68 GET_FLOAT(GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 1);
71 if (!info.is_core_profile())
73 GET_ENUM(GL_DEPTH_TEXTURE_MODE, 1);
79 int num_actual_levels = m_pTexture->get_num_levels();
80 uint num_faces = (m_pTexture->get_target() == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
82 for (uint face = 0; face < num_faces; face++)
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;
88 vogleditor_stateTreeItem* pFaceNode = this;
90 if (m_pTexture->get_target() == GL_TEXTURE_CUBE_MAP)
92 pFaceNode = new vogleditor_stateTreeItem(enum_to_string(face_target_to_query), "", this);
93 this->appendChild(pFaceNode);
96 for (int level = base_level; level < num_actual_levels; level++)
98 vogleditor_stateTreeItem* pLevelNode = new vogleditor_stateTreeItem(tmp.sprintf("Mip level %d", level), "", pFaceNode);
99 pFaceNode->appendChild(pLevelNode);
101 const vogl_state_vector& level_params = m_pTexture->get_level_params(face, level);
103 // TODO: Check for core vs. compat profiles and not query the old stuff
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);
113 GET_INT(GL_TEXTURE_SAMPLES, 1);
114 GET_ENUM(GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, 1);
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];
128 if (info.supports_extension("GL_ARB_depth_texture"))
130 GET_INT(GL_TEXTURE_DEPTH_SIZE, 1);
131 GET_INT(GL_TEXTURE_DEPTH_TYPE, 1);
134 if (info.supports_extension("GL_EXT_packed_depth_stencil"))
135 GET_INT(GL_TEXTURE_STENCIL_SIZE_EXT, 1);
137 if (m_pTexture->get_target() == GL_TEXTURE_BUFFER)
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);
146 GET_INT(GL_TEXTURE_COMPRESSED_IMAGE_SIZE, 1);