[148] | 1 | /* |
---|
| 2 | ----------------------------------------------------------------------------- |
---|
| 3 | This source file is part of OGRE |
---|
| 4 | (Object-oriented Graphics Rendering Engine) |
---|
| 5 | For the latest info, see http://www.ogre3d.org/ |
---|
| 6 | |
---|
| 7 | Copyright (c) 2000-2013 Torus Knot Software Ltd |
---|
| 8 | |
---|
| 9 | Permission is hereby granted, free of charge, to any person obtaining a copy |
---|
| 10 | of this software and associated documentation files (the "Software"), to deal |
---|
| 11 | in the Software without restriction, including without limitation the rights |
---|
| 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
---|
| 13 | copies of the Software, and to permit persons to whom the Software is |
---|
| 14 | furnished to do so, subject to the following conditions: |
---|
| 15 | |
---|
| 16 | The above copyright notice and this permission notice shall be included in |
---|
| 17 | all copies or substantial portions of the Software. |
---|
| 18 | |
---|
| 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
---|
| 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
---|
| 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
---|
| 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
---|
| 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
---|
| 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
---|
| 25 | THE SOFTWARE. |
---|
| 26 | ----------------------------------------------------------------------------- |
---|
| 27 | */ |
---|
| 28 | #ifndef __RenderSystemCapabilities__ |
---|
| 29 | #define __RenderSystemCapabilities__ |
---|
| 30 | |
---|
| 31 | // Precompiler options |
---|
| 32 | #include "OgrePrerequisites.h" |
---|
| 33 | #include "OgreString.h" |
---|
| 34 | #include "OgreStringConverter.h" |
---|
| 35 | #include "OgreStringVector.h" |
---|
| 36 | #include "OgreResource.h" |
---|
| 37 | #include "OgreLogManager.h" |
---|
| 38 | #include "OgreHeaderPrefix.h" |
---|
| 39 | |
---|
| 40 | // Because there are more than 32 possible Capabilities, more than 1 int is needed to store them all. |
---|
| 41 | // In fact, an array of integers is used to store capabilities. However all the capabilities are defined in the single |
---|
| 42 | // enum. The only way to know which capabilities should be stored where in the array is to use some of the 32 bits |
---|
| 43 | // to record the category of the capability. These top few bits are used as an index into mCapabilities array |
---|
| 44 | // The lower bits are used to identify each capability individually by setting 1 bit for each |
---|
| 45 | |
---|
| 46 | // Identifies how many bits are reserved for categories |
---|
| 47 | // NOTE: Although 4 bits (currently) are enough |
---|
| 48 | #define CAPS_CATEGORY_SIZE 4 |
---|
| 49 | #define OGRE_CAPS_BITSHIFT (32 - CAPS_CATEGORY_SIZE) |
---|
| 50 | #define CAPS_CATEGORY_MASK (((1 << CAPS_CATEGORY_SIZE) - 1) << OGRE_CAPS_BITSHIFT) |
---|
| 51 | #define OGRE_CAPS_VALUE(cat, val) ((cat << OGRE_CAPS_BITSHIFT) | (1 << val)) |
---|
| 52 | |
---|
| 53 | namespace Ogre |
---|
| 54 | { |
---|
| 55 | /** \addtogroup Core |
---|
| 56 | * @{ |
---|
| 57 | */ |
---|
| 58 | /** \addtogroup RenderSystem |
---|
| 59 | * @{ |
---|
| 60 | */ |
---|
| 61 | |
---|
| 62 | /// Enumerates the categories of capabilities |
---|
| 63 | enum CapabilitiesCategory |
---|
| 64 | { |
---|
| 65 | CAPS_CATEGORY_COMMON = 0, |
---|
| 66 | CAPS_CATEGORY_COMMON_2 = 1, |
---|
| 67 | CAPS_CATEGORY_D3D9 = 2, |
---|
| 68 | CAPS_CATEGORY_GL = 3, |
---|
| 69 | /// Placeholder for max value |
---|
| 70 | CAPS_CATEGORY_COUNT = 4 |
---|
| 71 | }; |
---|
| 72 | |
---|
| 73 | /// Enum describing the different hardware capabilities we want to check for |
---|
| 74 | /// OGRE_CAPS_VALUE(a, b) defines each capability |
---|
| 75 | // a is the category (which can be from 0 to 15) |
---|
| 76 | // b is the value (from 0 to 27) |
---|
| 77 | enum Capabilities |
---|
| 78 | { |
---|
| 79 | /// Supports generating mipmaps in hardware |
---|
| 80 | RSC_AUTOMIPMAP = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 0), |
---|
| 81 | RSC_BLENDING = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 1), |
---|
| 82 | /// Supports anisotropic texture filtering |
---|
| 83 | RSC_ANISOTROPY = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 2), |
---|
| 84 | /// Supports fixed-function DOT3 texture blend |
---|
| 85 | RSC_DOT3 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 3), |
---|
| 86 | /// Supports cube mapping |
---|
| 87 | RSC_CUBEMAPPING = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 4), |
---|
| 88 | /// Supports hardware stencil buffer |
---|
| 89 | RSC_HWSTENCIL = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 5), |
---|
| 90 | /// Supports hardware vertex and index buffers |
---|
| 91 | RSC_VBO = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 7), |
---|
| 92 | /// Supports vertex programs (vertex shaders) |
---|
| 93 | RSC_VERTEX_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 9), |
---|
| 94 | /// Supports fragment programs (pixel shaders) |
---|
| 95 | RSC_FRAGMENT_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 10), |
---|
| 96 | /// Supports performing a scissor test to exclude areas of the screen |
---|
| 97 | RSC_SCISSOR_TEST = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 11), |
---|
| 98 | /// Supports separate stencil updates for both front and back faces |
---|
| 99 | RSC_TWO_SIDED_STENCIL = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 12), |
---|
| 100 | /// Supports wrapping the stencil value at the range extremeties |
---|
| 101 | RSC_STENCIL_WRAP = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 13), |
---|
| 102 | /// Supports hardware occlusion queries |
---|
| 103 | RSC_HWOCCLUSION = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 14), |
---|
| 104 | /// Supports user clipping planes |
---|
| 105 | RSC_USER_CLIP_PLANES = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 15), |
---|
| 106 | /// Supports the VET_UBYTE4 vertex element type |
---|
| 107 | RSC_VERTEX_FORMAT_UBYTE4 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 16), |
---|
| 108 | /// Supports infinite far plane projection |
---|
| 109 | RSC_INFINITE_FAR_PLANE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 17), |
---|
| 110 | /// Supports hardware render-to-texture (bigger than framebuffer) |
---|
| 111 | RSC_HWRENDER_TO_TEXTURE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 18), |
---|
| 112 | /// Supports float textures and render targets |
---|
| 113 | RSC_TEXTURE_FLOAT = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 19), |
---|
| 114 | /// Supports non-power of two textures |
---|
| 115 | RSC_NON_POWER_OF_2_TEXTURES = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 20), |
---|
| 116 | /// Supports 3d (volume) textures |
---|
| 117 | RSC_TEXTURE_3D = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 21), |
---|
| 118 | /// Supports basic point sprite rendering |
---|
| 119 | RSC_POINT_SPRITES = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 22), |
---|
| 120 | /// Supports extra point parameters (minsize, maxsize, attenuation) |
---|
| 121 | RSC_POINT_EXTENDED_PARAMETERS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 23), |
---|
| 122 | /// Supports vertex texture fetch |
---|
| 123 | RSC_VERTEX_TEXTURE_FETCH = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 24), |
---|
| 124 | /// Supports mipmap LOD biasing |
---|
| 125 | RSC_MIPMAP_LOD_BIAS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 25), |
---|
| 126 | /// Supports hardware geometry programs |
---|
| 127 | RSC_GEOMETRY_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 26), |
---|
| 128 | /// Supports rendering to vertex buffers |
---|
| 129 | RSC_HWRENDER_TO_VERTEX_BUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 27), |
---|
| 130 | |
---|
| 131 | /// Supports compressed textures |
---|
| 132 | RSC_TEXTURE_COMPRESSION = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 0), |
---|
| 133 | /// Supports compressed textures in the DXT/ST3C formats |
---|
| 134 | RSC_TEXTURE_COMPRESSION_DXT = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 1), |
---|
| 135 | /// Supports compressed textures in the VTC format |
---|
| 136 | RSC_TEXTURE_COMPRESSION_VTC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 2), |
---|
| 137 | /// Supports compressed textures in the PVRTC format |
---|
| 138 | RSC_TEXTURE_COMPRESSION_PVRTC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 3), |
---|
| 139 | /// Supports compressed textures in the ATC format |
---|
| 140 | RSC_TEXTURE_COMPRESSION_ATC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 4), |
---|
| 141 | /// Supports compressed textures in the ETC1 format |
---|
| 142 | RSC_TEXTURE_COMPRESSION_ETC1 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 5), |
---|
| 143 | /// Supports compressed textures in the ETC2 format |
---|
| 144 | RSC_TEXTURE_COMPRESSION_ETC2 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 6), |
---|
| 145 | /// Supports compressed textures in BC4 and BC5 format (DirectX feature level 10_0) |
---|
| 146 | RSC_TEXTURE_COMPRESSION_BC4_BC5 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 7), |
---|
| 147 | /// Supports compressed textures in BC6H and BC7 format (DirectX feature level 11_0) |
---|
| 148 | RSC_TEXTURE_COMPRESSION_BC6H_BC7 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 8), |
---|
| 149 | /// Supports fixed-function pipeline |
---|
| 150 | RSC_FIXED_FUNCTION = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 9), |
---|
| 151 | /// Supports MRTs with different bit depths |
---|
| 152 | RSC_MRT_DIFFERENT_BIT_DEPTHS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 10), |
---|
| 153 | /// Supports Alpha to Coverage (A2C) |
---|
| 154 | RSC_ALPHA_TO_COVERAGE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 11), |
---|
| 155 | /// Supports Blending operations other than + |
---|
| 156 | RSC_ADVANCED_BLEND_OPERATIONS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 12), |
---|
| 157 | /// Supports a separate depth buffer for RTTs. D3D 9 & 10, OGL w/FBO (RSC_FBO implies this flag) |
---|
| 158 | RSC_RTT_SEPARATE_DEPTHBUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 13), |
---|
| 159 | /// Supports using the MAIN depth buffer for RTTs. D3D 9&10, OGL w/FBO support unknown |
---|
| 160 | /// (undefined behavior?), OGL w/ copy supports it |
---|
| 161 | RSC_RTT_MAIN_DEPTHBUFFER_ATTACHABLE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 14), |
---|
| 162 | /// Supports attaching a depth buffer to an RTT that has width & height less or equal than RTT's. |
---|
| 163 | /// Otherwise must be of _exact_ same resolution. D3D 9, OGL 3.0 (not 2.0, not D3D10) |
---|
| 164 | RSC_RTT_DEPTHBUFFER_RESOLUTION_LESSEQUAL = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 15), |
---|
| 165 | /// Supports using vertex buffers for instance data |
---|
| 166 | RSC_VERTEX_BUFFER_INSTANCE_DATA = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 16), |
---|
| 167 | /// Supports using vertex buffers for instance data |
---|
| 168 | RSC_CAN_GET_COMPILED_SHADER_BUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 17), |
---|
| 169 | /// Supports dynamic linkage/shader subroutine |
---|
| 170 | RSC_SHADER_SUBROUTINE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 18), |
---|
| 171 | |
---|
| 172 | RSC_HWRENDER_TO_TEXTURE_3D = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 19), |
---|
| 173 | /// Supports 1d textures |
---|
| 174 | RSC_TEXTURE_1D = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 20), |
---|
| 175 | /// Supports hardware tesselation hull programs |
---|
| 176 | RSC_TESSELATION_HULL_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 21), |
---|
| 177 | /// Supports hardware tesselation domain programs |
---|
| 178 | RSC_TESSELATION_DOMAIN_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 22), |
---|
| 179 | /// Supports hardware compute programs |
---|
| 180 | RSC_COMPUTE_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 23), |
---|
| 181 | /// Supports asynchronous hardware occlusion queries |
---|
| 182 | RSC_HWOCCLUSION_ASYNCHRONOUS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 24), |
---|
| 183 | /// Supports asynchronous hardware occlusion queries |
---|
| 184 | RSC_ATOMIC_COUNTERS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 25), |
---|
| 185 | |
---|
| 186 | // ***** DirectX specific caps ***** |
---|
| 187 | /// Is DirectX feature "per stage constants" supported |
---|
| 188 | RSC_PERSTAGECONSTANT = OGRE_CAPS_VALUE(CAPS_CATEGORY_D3D9, 0), |
---|
| 189 | |
---|
| 190 | // ***** GL Specific Caps ***** |
---|
| 191 | /// Supports OpenGL version 1.5 |
---|
| 192 | RSC_GL1_5_NOVBO = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 1), |
---|
| 193 | /// Support for Frame Buffer Objects (FBOs) |
---|
| 194 | RSC_FBO = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 2), |
---|
| 195 | /// Support for Frame Buffer Objects ARB implementation (regular FBO is higher precedence) |
---|
| 196 | RSC_FBO_ARB = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 3), |
---|
| 197 | /// Support for Frame Buffer Objects ATI implementation (ARB FBO is higher precedence) |
---|
| 198 | RSC_FBO_ATI = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 4), |
---|
| 199 | /// Support for PBuffer |
---|
| 200 | RSC_PBUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 5), |
---|
| 201 | /// Support for GL 1.5 but without HW occlusion workaround |
---|
| 202 | RSC_GL1_5_NOHWOCCLUSION = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 6), |
---|
| 203 | /// Support for point parameters ARB implementation |
---|
| 204 | RSC_POINT_EXTENDED_PARAMETERS_ARB = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 7), |
---|
| 205 | /// Support for point parameters EXT implementation |
---|
| 206 | RSC_POINT_EXTENDED_PARAMETERS_EXT = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 8), |
---|
| 207 | /// Support for Separate Shader Objects |
---|
| 208 | RSC_SEPARATE_SHADER_OBJECTS = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 9), |
---|
| 209 | /// Support for Vertex Array Objects (VAOs) |
---|
| 210 | RSC_VAO = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 10) |
---|
| 211 | }; |
---|
| 212 | |
---|
| 213 | /// DriverVersion is used by RenderSystemCapabilities and both GL and D3D9 |
---|
| 214 | /// to store the version of the current GPU driver |
---|
| 215 | struct _OgreExport DriverVersion |
---|
| 216 | { |
---|
| 217 | int major; |
---|
| 218 | int minor; |
---|
| 219 | int release; |
---|
| 220 | int build; |
---|
| 221 | |
---|
| 222 | DriverVersion() |
---|
| 223 | { |
---|
| 224 | major = minor = release = build = 0; |
---|
| 225 | } |
---|
| 226 | |
---|
| 227 | String toString() const |
---|
| 228 | { |
---|
| 229 | StringUtil::StrStreamType str; |
---|
| 230 | str << major << "." << minor << "." << release << "." << build; |
---|
| 231 | return str.str(); |
---|
| 232 | } |
---|
| 233 | |
---|
| 234 | void fromString(const String& versionString) |
---|
| 235 | { |
---|
| 236 | StringVector tokens = StringUtil::split(versionString, "."); |
---|
| 237 | if(!tokens.empty()) |
---|
| 238 | { |
---|
| 239 | major = StringConverter::parseInt(tokens[0]); |
---|
| 240 | if (tokens.size() > 1) |
---|
| 241 | minor = StringConverter::parseInt(tokens[1]); |
---|
| 242 | if (tokens.size() > 2) |
---|
| 243 | release = StringConverter::parseInt(tokens[2]); |
---|
| 244 | if (tokens.size() > 3) |
---|
| 245 | build = StringConverter::parseInt(tokens[3]); |
---|
| 246 | } |
---|
| 247 | |
---|
| 248 | } |
---|
| 249 | }; |
---|
| 250 | |
---|
| 251 | /** Enumeration of GPU vendors. */ |
---|
| 252 | enum GPUVendor |
---|
| 253 | { |
---|
| 254 | GPU_UNKNOWN = 0, |
---|
| 255 | GPU_NVIDIA = 1, |
---|
| 256 | GPU_AMD = 2, |
---|
| 257 | GPU_INTEL = 3, |
---|
| 258 | GPU_S3 = 4, |
---|
| 259 | GPU_MATROX = 5, |
---|
| 260 | GPU_3DLABS = 6, |
---|
| 261 | GPU_SIS = 7, |
---|
| 262 | GPU_IMAGINATION_TECHNOLOGIES = 8, |
---|
| 263 | GPU_APPLE = 9, // Apple Software Renderer |
---|
| 264 | GPU_NOKIA = 10, |
---|
| 265 | GPU_MS_SOFTWARE = 11, // Microsoft software device |
---|
| 266 | GPU_MS_WARP = 12, // Microsoft WARP (Windows Advanced Rasterization Platform) software device - http://msdn.microsoft.com/en-us/library/dd285359.aspx |
---|
| 267 | GPU_ARM = 13, // For the Mali chipsets |
---|
| 268 | GPU_QUALCOMM = 14, |
---|
| 269 | |
---|
| 270 | /// placeholder |
---|
| 271 | GPU_VENDOR_COUNT = 15 |
---|
| 272 | }; |
---|
| 273 | |
---|
| 274 | /** singleton class for storing the capabilities of the graphics card. |
---|
| 275 | @remarks |
---|
| 276 | This class stores the capabilities of the graphics card. This |
---|
| 277 | information is set by the individual render systems. |
---|
| 278 | */ |
---|
| 279 | class _OgreExport RenderSystemCapabilities : public RenderSysAlloc |
---|
| 280 | { |
---|
| 281 | |
---|
| 282 | public: |
---|
| 283 | |
---|
| 284 | typedef set<String>::type ShaderProfiles; |
---|
| 285 | private: |
---|
| 286 | /// This is used to build a database of RSC's |
---|
| 287 | /// if a RSC with same name, but newer version is introduced, the older one |
---|
| 288 | /// will be removed |
---|
| 289 | DriverVersion mDriverVersion; |
---|
| 290 | /// GPU Vendor |
---|
| 291 | GPUVendor mVendor; |
---|
| 292 | |
---|
| 293 | static StringVector msGPUVendorStrings; |
---|
| 294 | static void initVendorStrings(); |
---|
| 295 | |
---|
| 296 | /// The number of world matrices available |
---|
| 297 | ushort mNumWorldMatrices; |
---|
| 298 | /// The number of texture units available |
---|
| 299 | ushort mNumTextureUnits; |
---|
| 300 | /// The stencil buffer bit depth |
---|
| 301 | ushort mStencilBufferBitDepth; |
---|
| 302 | /// The number of matrices available for hardware blending |
---|
| 303 | ushort mNumVertexBlendMatrices; |
---|
| 304 | /// Stores the capabilities flags. |
---|
| 305 | int mCapabilities[CAPS_CATEGORY_COUNT]; |
---|
| 306 | /// Which categories are relevant |
---|
| 307 | bool mCategoryRelevant[CAPS_CATEGORY_COUNT]; |
---|
| 308 | /// The name of the device as reported by the render system |
---|
| 309 | String mDeviceName; |
---|
| 310 | /// The identifier associated with the render system for which these capabilities are valid |
---|
| 311 | String mRenderSystemName; |
---|
| 312 | |
---|
| 313 | /// The number of floating-point constants vertex programs support |
---|
| 314 | ushort mVertexProgramConstantFloatCount; |
---|
| 315 | /// The number of integer constants vertex programs support |
---|
| 316 | ushort mVertexProgramConstantIntCount; |
---|
| 317 | /// The number of boolean constants vertex programs support |
---|
| 318 | ushort mVertexProgramConstantBoolCount; |
---|
| 319 | /// The number of floating-point constants geometry programs support |
---|
| 320 | ushort mGeometryProgramConstantFloatCount; |
---|
| 321 | /// The number of integer constants vertex geometry support |
---|
| 322 | ushort mGeometryProgramConstantIntCount; |
---|
| 323 | /// The number of boolean constants vertex geometry support |
---|
| 324 | ushort mGeometryProgramConstantBoolCount; |
---|
| 325 | /// The number of floating-point constants fragment programs support |
---|
| 326 | ushort mFragmentProgramConstantFloatCount; |
---|
| 327 | /// The number of integer constants fragment programs support |
---|
| 328 | ushort mFragmentProgramConstantIntCount; |
---|
| 329 | /// The number of boolean constants fragment programs support |
---|
| 330 | ushort mFragmentProgramConstantBoolCount; |
---|
| 331 | /// The number of simultaneous render targets supported |
---|
| 332 | ushort mNumMultiRenderTargets; |
---|
| 333 | /// The maximum point size |
---|
| 334 | Real mMaxPointSize; |
---|
| 335 | /// Are non-POW2 textures feature-limited? |
---|
| 336 | bool mNonPOW2TexturesLimited; |
---|
| 337 | /// The maximum supported anisotropy |
---|
| 338 | Real mMaxSupportedAnisotropy; |
---|
| 339 | /// The number of vertex texture units supported |
---|
| 340 | ushort mNumVertexTextureUnits; |
---|
| 341 | /// Are vertex texture units shared with fragment processor? |
---|
| 342 | bool mVertexTextureUnitsShared; |
---|
| 343 | /// The number of vertices a geometry program can emit in a single run |
---|
| 344 | int mGeometryProgramNumOutputVertices; |
---|
| 345 | |
---|
| 346 | |
---|
| 347 | /// The list of supported shader profiles |
---|
| 348 | ShaderProfiles mSupportedShaderProfiles; |
---|
| 349 | |
---|
| 350 | // Support for new shader stages in shader model 5.0 |
---|
| 351 | /// The number of floating-point constants tesselation Hull programs support |
---|
| 352 | ushort mTesselationHullProgramConstantFloatCount; |
---|
| 353 | /// The number of integer constants tesselation Hull programs support |
---|
| 354 | ushort mTesselationHullProgramConstantIntCount; |
---|
| 355 | /// The number of boolean constants tesselation Hull programs support |
---|
| 356 | ushort mTesselationHullProgramConstantBoolCount; |
---|
| 357 | /// The number of floating-point constants tesselation Domain programs support |
---|
| 358 | ushort mTesselationDomainProgramConstantFloatCount; |
---|
| 359 | /// The number of integer constants tesselation Domain programs support |
---|
| 360 | ushort mTesselationDomainProgramConstantIntCount; |
---|
| 361 | /// The number of boolean constants tesselation Domain programs support |
---|
| 362 | ushort mTesselationDomainProgramConstantBoolCount; |
---|
| 363 | /// The number of floating-point constants compute programs support |
---|
| 364 | ushort mComputeProgramConstantFloatCount; |
---|
| 365 | /// The number of integer constants compute programs support |
---|
| 366 | ushort mComputeProgramConstantIntCount; |
---|
| 367 | /// The number of boolean constants compute programs support |
---|
| 368 | ushort mComputeProgramConstantBoolCount; |
---|
| 369 | |
---|
| 370 | |
---|
| 371 | |
---|
| 372 | public: |
---|
| 373 | RenderSystemCapabilities (); |
---|
| 374 | virtual ~RenderSystemCapabilities (); |
---|
| 375 | |
---|
| 376 | virtual size_t calculateSize() const {return 0;} |
---|
| 377 | |
---|
| 378 | /** Set the driver version. */ |
---|
| 379 | void setDriverVersion(const DriverVersion& version) |
---|
| 380 | { |
---|
| 381 | mDriverVersion = version; |
---|
| 382 | } |
---|
| 383 | |
---|
| 384 | void parseDriverVersionFromString(const String& versionString) |
---|
| 385 | { |
---|
| 386 | DriverVersion version; |
---|
| 387 | version.fromString(versionString); |
---|
| 388 | setDriverVersion(version); |
---|
| 389 | } |
---|
| 390 | |
---|
| 391 | |
---|
| 392 | DriverVersion getDriverVersion() const |
---|
| 393 | { |
---|
| 394 | return mDriverVersion; |
---|
| 395 | } |
---|
| 396 | |
---|
| 397 | GPUVendor getVendor() const |
---|
| 398 | { |
---|
| 399 | return mVendor; |
---|
| 400 | } |
---|
| 401 | |
---|
| 402 | void setVendor(GPUVendor v) |
---|
| 403 | { |
---|
| 404 | mVendor = v; |
---|
| 405 | } |
---|
| 406 | |
---|
| 407 | /// Parse and set vendor |
---|
| 408 | void parseVendorFromString(const String& vendorString) |
---|
| 409 | { |
---|
| 410 | setVendor(vendorFromString(vendorString)); |
---|
| 411 | } |
---|
| 412 | |
---|
| 413 | /// Convert a vendor string to an enum |
---|
| 414 | static GPUVendor vendorFromString(const String& vendorString); |
---|
| 415 | /// Convert a vendor enum to a string |
---|
| 416 | static String vendorToString(GPUVendor v); |
---|
| 417 | |
---|
| 418 | bool isDriverOlderThanVersion(DriverVersion v) const |
---|
| 419 | { |
---|
| 420 | if (mDriverVersion.major < v.major) |
---|
| 421 | return true; |
---|
| 422 | else if (mDriverVersion.major == v.major && |
---|
| 423 | mDriverVersion.minor < v.minor) |
---|
| 424 | return true; |
---|
| 425 | else if (mDriverVersion.major == v.major && |
---|
| 426 | mDriverVersion.minor == v.minor && |
---|
| 427 | mDriverVersion.release < v.release) |
---|
| 428 | return true; |
---|
| 429 | else if (mDriverVersion.major == v.major && |
---|
| 430 | mDriverVersion.minor == v.minor && |
---|
| 431 | mDriverVersion.release == v.release && |
---|
| 432 | mDriverVersion.build < v.build) |
---|
| 433 | return true; |
---|
| 434 | return false; |
---|
| 435 | } |
---|
| 436 | |
---|
| 437 | void setNumWorldMatrices(ushort num) |
---|
| 438 | { |
---|
| 439 | mNumWorldMatrices = num; |
---|
| 440 | } |
---|
| 441 | |
---|
| 442 | void setNumTextureUnits(ushort num) |
---|
| 443 | { |
---|
| 444 | mNumTextureUnits = num; |
---|
| 445 | } |
---|
| 446 | |
---|
| 447 | void setStencilBufferBitDepth(ushort num) |
---|
| 448 | { |
---|
| 449 | mStencilBufferBitDepth = num; |
---|
| 450 | } |
---|
| 451 | |
---|
| 452 | void setNumVertexBlendMatrices(ushort num) |
---|
| 453 | { |
---|
| 454 | mNumVertexBlendMatrices = num; |
---|
| 455 | } |
---|
| 456 | |
---|
| 457 | /// The number of simultaneous render targets supported |
---|
| 458 | void setNumMultiRenderTargets(ushort num) |
---|
| 459 | { |
---|
| 460 | mNumMultiRenderTargets = num; |
---|
| 461 | } |
---|
| 462 | |
---|
| 463 | ushort getNumWorldMatrices(void) const |
---|
| 464 | { |
---|
| 465 | return mNumWorldMatrices; |
---|
| 466 | } |
---|
| 467 | |
---|
| 468 | /** Returns the number of texture units the current output hardware |
---|
| 469 | supports. |
---|
| 470 | |
---|
| 471 | For use in rendering, this determines how many texture units the |
---|
| 472 | are available for multitexturing (i.e. rendering multiple |
---|
| 473 | textures in a single pass). Where a Material has multiple |
---|
| 474 | texture layers, it will try to use multitexturing where |
---|
| 475 | available, and where it is not available, will perform multipass |
---|
| 476 | rendering to achieve the same effect. This property only applies |
---|
| 477 | to the fixed-function pipeline, the number available to the |
---|
| 478 | programmable pipeline depends on the shader model in use. |
---|
| 479 | */ |
---|
| 480 | ushort getNumTextureUnits(void) const |
---|
| 481 | { |
---|
| 482 | return mNumTextureUnits; |
---|
| 483 | } |
---|
| 484 | |
---|
| 485 | /** Determines the bit depth of the hardware accelerated stencil |
---|
| 486 | buffer, if supported. |
---|
| 487 | @remarks |
---|
| 488 | If hardware stencilling is not supported, the software will |
---|
| 489 | provide an 8-bit software stencil. |
---|
| 490 | */ |
---|
| 491 | ushort getStencilBufferBitDepth(void) const |
---|
| 492 | { |
---|
| 493 | return mStencilBufferBitDepth; |
---|
| 494 | } |
---|
| 495 | |
---|
| 496 | /** Returns the number of matrices available to hardware vertex |
---|
| 497 | blending for this rendering system. */ |
---|
| 498 | ushort getNumVertexBlendMatrices(void) const |
---|
| 499 | { |
---|
| 500 | return mNumVertexBlendMatrices; |
---|
| 501 | } |
---|
| 502 | |
---|
| 503 | /// The number of simultaneous render targets supported |
---|
| 504 | ushort getNumMultiRenderTargets(void) const |
---|
| 505 | { |
---|
| 506 | return mNumMultiRenderTargets; |
---|
| 507 | } |
---|
| 508 | |
---|
| 509 | /** Returns true if capability is render system specific |
---|
| 510 | */ |
---|
| 511 | bool isCapabilityRenderSystemSpecific(const Capabilities c) const |
---|
| 512 | { |
---|
| 513 | int cat = c >> OGRE_CAPS_BITSHIFT; |
---|
| 514 | if(cat == CAPS_CATEGORY_GL || cat == CAPS_CATEGORY_D3D9) |
---|
| 515 | return true; |
---|
| 516 | return false; |
---|
| 517 | } |
---|
| 518 | |
---|
| 519 | /** Adds a capability flag |
---|
| 520 | */ |
---|
| 521 | void setCapability(const Capabilities c) |
---|
| 522 | { |
---|
| 523 | int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT; |
---|
| 524 | // zero out the index from the stored capability |
---|
| 525 | mCapabilities[index] |= (c & ~CAPS_CATEGORY_MASK); |
---|
| 526 | } |
---|
| 527 | |
---|
| 528 | /** Remove a capability flag |
---|
| 529 | */ |
---|
| 530 | void unsetCapability(const Capabilities c) |
---|
| 531 | { |
---|
| 532 | int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT; |
---|
| 533 | // zero out the index from the stored capability |
---|
| 534 | mCapabilities[index] &= (~c | CAPS_CATEGORY_MASK); |
---|
| 535 | } |
---|
| 536 | |
---|
| 537 | /** Checks for a capability |
---|
| 538 | */ |
---|
| 539 | bool hasCapability(const Capabilities c) const |
---|
| 540 | { |
---|
| 541 | int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT; |
---|
| 542 | // test against |
---|
| 543 | if(mCapabilities[index] & (c & ~CAPS_CATEGORY_MASK)) |
---|
| 544 | { |
---|
| 545 | return true; |
---|
| 546 | } |
---|
| 547 | else |
---|
| 548 | { |
---|
| 549 | return false; |
---|
| 550 | } |
---|
| 551 | } |
---|
| 552 | |
---|
| 553 | /** Adds the profile to the list of supported profiles |
---|
| 554 | */ |
---|
| 555 | void addShaderProfile(const String& profile) |
---|
| 556 | { |
---|
| 557 | mSupportedShaderProfiles.insert(profile); |
---|
| 558 | |
---|
| 559 | } |
---|
| 560 | |
---|
| 561 | /** Remove a given shader profile, if present. |
---|
| 562 | */ |
---|
| 563 | void removeShaderProfile(const String& profile) |
---|
| 564 | { |
---|
| 565 | mSupportedShaderProfiles.erase(profile); |
---|
| 566 | } |
---|
| 567 | |
---|
| 568 | /** Returns true if profile is in the list of supported profiles |
---|
| 569 | */ |
---|
| 570 | bool isShaderProfileSupported(const String& profile) const |
---|
| 571 | { |
---|
| 572 | return (mSupportedShaderProfiles.end() != mSupportedShaderProfiles.find(profile)); |
---|
| 573 | } |
---|
| 574 | |
---|
| 575 | |
---|
| 576 | /** Returns a set of all supported shader profiles |
---|
| 577 | * */ |
---|
| 578 | const ShaderProfiles& getSupportedShaderProfiles() const |
---|
| 579 | { |
---|
| 580 | return mSupportedShaderProfiles; |
---|
| 581 | } |
---|
| 582 | |
---|
| 583 | |
---|
| 584 | /// The number of floating-point constants vertex programs support |
---|
| 585 | ushort getVertexProgramConstantFloatCount(void) const |
---|
| 586 | { |
---|
| 587 | return mVertexProgramConstantFloatCount; |
---|
| 588 | } |
---|
| 589 | /// The number of integer constants vertex programs support |
---|
| 590 | ushort getVertexProgramConstantIntCount(void) const |
---|
| 591 | { |
---|
| 592 | return mVertexProgramConstantIntCount; |
---|
| 593 | } |
---|
| 594 | /// The number of boolean constants vertex programs support |
---|
| 595 | ushort getVertexProgramConstantBoolCount(void) const |
---|
| 596 | { |
---|
| 597 | return mVertexProgramConstantBoolCount; |
---|
| 598 | } |
---|
| 599 | /// The number of floating-point constants geometry programs support |
---|
| 600 | ushort getGeometryProgramConstantFloatCount(void) const |
---|
| 601 | { |
---|
| 602 | return mGeometryProgramConstantFloatCount; |
---|
| 603 | } |
---|
| 604 | /// The number of integer constants geometry programs support |
---|
| 605 | ushort getGeometryProgramConstantIntCount(void) const |
---|
| 606 | { |
---|
| 607 | return mGeometryProgramConstantIntCount; |
---|
| 608 | } |
---|
| 609 | /// The number of boolean constants geometry programs support |
---|
| 610 | ushort getGeometryProgramConstantBoolCount(void) const |
---|
| 611 | { |
---|
| 612 | return mGeometryProgramConstantBoolCount; |
---|
| 613 | } |
---|
| 614 | /// The number of floating-point constants fragment programs support |
---|
| 615 | ushort getFragmentProgramConstantFloatCount(void) const |
---|
| 616 | { |
---|
| 617 | return mFragmentProgramConstantFloatCount; |
---|
| 618 | } |
---|
| 619 | /// The number of integer constants fragment programs support |
---|
| 620 | ushort getFragmentProgramConstantIntCount(void) const |
---|
| 621 | { |
---|
| 622 | return mFragmentProgramConstantIntCount; |
---|
| 623 | } |
---|
| 624 | /// The number of boolean constants fragment programs support |
---|
| 625 | ushort getFragmentProgramConstantBoolCount(void) const |
---|
| 626 | { |
---|
| 627 | return mFragmentProgramConstantBoolCount; |
---|
| 628 | } |
---|
| 629 | |
---|
| 630 | /// sets the device name for Render system |
---|
| 631 | void setDeviceName(const String& name) |
---|
| 632 | { |
---|
| 633 | mDeviceName = name; |
---|
| 634 | } |
---|
| 635 | |
---|
| 636 | /// gets the device name for render system |
---|
| 637 | String getDeviceName() const |
---|
| 638 | { |
---|
| 639 | return mDeviceName; |
---|
| 640 | } |
---|
| 641 | |
---|
| 642 | /// The number of floating-point constants vertex programs support |
---|
| 643 | void setVertexProgramConstantFloatCount(ushort c) |
---|
| 644 | { |
---|
| 645 | mVertexProgramConstantFloatCount = c; |
---|
| 646 | } |
---|
| 647 | /// The number of integer constants vertex programs support |
---|
| 648 | void setVertexProgramConstantIntCount(ushort c) |
---|
| 649 | { |
---|
| 650 | mVertexProgramConstantIntCount = c; |
---|
| 651 | } |
---|
| 652 | /// The number of boolean constants vertex programs support |
---|
| 653 | void setVertexProgramConstantBoolCount(ushort c) |
---|
| 654 | { |
---|
| 655 | mVertexProgramConstantBoolCount = c; |
---|
| 656 | } |
---|
| 657 | /// The number of floating-point constants geometry programs support |
---|
| 658 | void setGeometryProgramConstantFloatCount(ushort c) |
---|
| 659 | { |
---|
| 660 | mGeometryProgramConstantFloatCount = c; |
---|
| 661 | } |
---|
| 662 | /// The number of integer constants geometry programs support |
---|
| 663 | void setGeometryProgramConstantIntCount(ushort c) |
---|
| 664 | { |
---|
| 665 | mGeometryProgramConstantIntCount = c; |
---|
| 666 | } |
---|
| 667 | /// The number of boolean constants geometry programs support |
---|
| 668 | void setGeometryProgramConstantBoolCount(ushort c) |
---|
| 669 | { |
---|
| 670 | mGeometryProgramConstantBoolCount = c; |
---|
| 671 | } |
---|
| 672 | /// The number of floating-point constants fragment programs support |
---|
| 673 | void setFragmentProgramConstantFloatCount(ushort c) |
---|
| 674 | { |
---|
| 675 | mFragmentProgramConstantFloatCount = c; |
---|
| 676 | } |
---|
| 677 | /// The number of integer constants fragment programs support |
---|
| 678 | void setFragmentProgramConstantIntCount(ushort c) |
---|
| 679 | { |
---|
| 680 | mFragmentProgramConstantIntCount = c; |
---|
| 681 | } |
---|
| 682 | /// The number of boolean constants fragment programs support |
---|
| 683 | void setFragmentProgramConstantBoolCount(ushort c) |
---|
| 684 | { |
---|
| 685 | mFragmentProgramConstantBoolCount = c; |
---|
| 686 | } |
---|
| 687 | /// Maximum point screen size in pixels |
---|
| 688 | void setMaxPointSize(Real s) |
---|
| 689 | { |
---|
| 690 | mMaxPointSize = s; |
---|
| 691 | } |
---|
| 692 | /// Maximum point screen size in pixels |
---|
| 693 | Real getMaxPointSize(void) const |
---|
| 694 | { |
---|
| 695 | return mMaxPointSize; |
---|
| 696 | } |
---|
| 697 | /// Non-POW2 textures limited |
---|
| 698 | void setNonPOW2TexturesLimited(bool l) |
---|
| 699 | { |
---|
| 700 | mNonPOW2TexturesLimited = l; |
---|
| 701 | } |
---|
| 702 | /** Are non-power of two textures limited in features? |
---|
| 703 | @remarks |
---|
| 704 | If the RSC_NON_POWER_OF_2_TEXTURES capability is set, but this |
---|
| 705 | method returns true, you can use non power of 2 textures only if: |
---|
| 706 | <ul><li>You load them explicitly with no mip maps</li> |
---|
| 707 | <li>You don't use DXT texture compression</li> |
---|
| 708 | <li>You use clamp texture addressing</li></ul> |
---|
| 709 | */ |
---|
| 710 | bool getNonPOW2TexturesLimited(void) const |
---|
| 711 | { |
---|
| 712 | return mNonPOW2TexturesLimited; |
---|
| 713 | } |
---|
| 714 | /// Set the maximum supported anisotropic filtering |
---|
| 715 | void setMaxSupportedAnisotropy(Real s) |
---|
| 716 | { |
---|
| 717 | mMaxSupportedAnisotropy = s; |
---|
| 718 | } |
---|
| 719 | /// Get the maximum supported anisotropic filtering |
---|
| 720 | Real getMaxSupportedAnisotropy() |
---|
| 721 | { |
---|
| 722 | return mMaxSupportedAnisotropy; |
---|
| 723 | } |
---|
| 724 | |
---|
| 725 | /// Set the number of vertex texture units supported |
---|
| 726 | void setNumVertexTextureUnits(ushort n) |
---|
| 727 | { |
---|
| 728 | mNumVertexTextureUnits = n; |
---|
| 729 | } |
---|
| 730 | /// Get the number of vertex texture units supported |
---|
| 731 | ushort getNumVertexTextureUnits(void) const |
---|
| 732 | { |
---|
| 733 | return mNumVertexTextureUnits; |
---|
| 734 | } |
---|
| 735 | /// Set whether the vertex texture units are shared with the fragment processor |
---|
| 736 | void setVertexTextureUnitsShared(bool shared) |
---|
| 737 | { |
---|
| 738 | mVertexTextureUnitsShared = shared; |
---|
| 739 | } |
---|
| 740 | /// Get whether the vertex texture units are shared with the fragment processor |
---|
| 741 | bool getVertexTextureUnitsShared(void) const |
---|
| 742 | { |
---|
| 743 | return mVertexTextureUnitsShared; |
---|
| 744 | } |
---|
| 745 | |
---|
| 746 | /// Set the number of vertices a single geometry program run can emit |
---|
| 747 | void setGeometryProgramNumOutputVertices(int numOutputVertices) |
---|
| 748 | { |
---|
| 749 | mGeometryProgramNumOutputVertices = numOutputVertices; |
---|
| 750 | } |
---|
| 751 | /// Get the number of vertices a single geometry program run can emit |
---|
| 752 | int getGeometryProgramNumOutputVertices(void) const |
---|
| 753 | { |
---|
| 754 | return mGeometryProgramNumOutputVertices; |
---|
| 755 | } |
---|
| 756 | |
---|
| 757 | /// Get the identifier of the rendersystem from which these capabilities were generated |
---|
| 758 | String getRenderSystemName(void) const |
---|
| 759 | { |
---|
| 760 | return mRenderSystemName; |
---|
| 761 | } |
---|
| 762 | /// Set the identifier of the rendersystem from which these capabilities were generated |
---|
| 763 | void setRenderSystemName(const String& rs) |
---|
| 764 | { |
---|
| 765 | mRenderSystemName = rs; |
---|
| 766 | } |
---|
| 767 | |
---|
| 768 | /// Mark a category as 'relevant' or not, ie will it be reported |
---|
| 769 | void setCategoryRelevant(CapabilitiesCategory cat, bool relevant) |
---|
| 770 | { |
---|
| 771 | mCategoryRelevant[cat] = relevant; |
---|
| 772 | } |
---|
| 773 | |
---|
| 774 | /// Return whether a category is 'relevant' or not, ie will it be reported |
---|
| 775 | bool isCategoryRelevant(CapabilitiesCategory cat) |
---|
| 776 | { |
---|
| 777 | return mCategoryRelevant[cat]; |
---|
| 778 | } |
---|
| 779 | |
---|
| 780 | |
---|
| 781 | |
---|
| 782 | /** Write the capabilities to the pass in Log */ |
---|
| 783 | void log(Log* pLog); |
---|
| 784 | |
---|
| 785 | // Support for new shader stages in shader model 5.0 |
---|
| 786 | /// The number of floating-point constants tesselation Hull programs support |
---|
| 787 | void setTesselationHullProgramConstantFloatCount(ushort c) |
---|
| 788 | { |
---|
| 789 | mTesselationHullProgramConstantFloatCount = c; |
---|
| 790 | } |
---|
| 791 | /// The number of integer constants tesselation Domain programs support |
---|
| 792 | void setTesselationHullProgramConstantIntCount(ushort c) |
---|
| 793 | { |
---|
| 794 | mTesselationHullProgramConstantIntCount = c; |
---|
| 795 | } |
---|
| 796 | /// The number of boolean constants tesselation Domain programs support |
---|
| 797 | void setTesselationHullProgramConstantBoolCount(ushort c) |
---|
| 798 | { |
---|
| 799 | mTesselationHullProgramConstantBoolCount = c; |
---|
| 800 | } |
---|
| 801 | /// The number of floating-point constants fragment programs support |
---|
| 802 | ushort getTesselationHullProgramConstantFloatCount(void) const |
---|
| 803 | { |
---|
| 804 | return mTesselationHullProgramConstantFloatCount; |
---|
| 805 | } |
---|
| 806 | /// The number of integer constants fragment programs support |
---|
| 807 | ushort getTesselationHullProgramConstantIntCount(void) const |
---|
| 808 | { |
---|
| 809 | return mTesselationHullProgramConstantIntCount; |
---|
| 810 | } |
---|
| 811 | /// The number of boolean constants fragment programs support |
---|
| 812 | ushort getTesselationHullProgramConstantBoolCount(void) const |
---|
| 813 | { |
---|
| 814 | return mTesselationHullProgramConstantBoolCount; |
---|
| 815 | } |
---|
| 816 | |
---|
| 817 | /// The number of floating-point constants tesselation Domain programs support |
---|
| 818 | void setTesselationDomainProgramConstantFloatCount(ushort c) |
---|
| 819 | { |
---|
| 820 | mTesselationDomainProgramConstantFloatCount = c; |
---|
| 821 | } |
---|
| 822 | /// The number of integer constants tesselation Domain programs support |
---|
| 823 | void setTesselationDomainProgramConstantIntCount(ushort c) |
---|
| 824 | { |
---|
| 825 | mTesselationDomainProgramConstantIntCount = c; |
---|
| 826 | } |
---|
| 827 | /// The number of boolean constants tesselation Domain programs support |
---|
| 828 | void setTesselationDomainProgramConstantBoolCount(ushort c) |
---|
| 829 | { |
---|
| 830 | mTesselationDomainProgramConstantBoolCount = c; |
---|
| 831 | } |
---|
| 832 | /// The number of floating-point constants fragment programs support |
---|
| 833 | ushort getTesselationDomainProgramConstantFloatCount(void) const |
---|
| 834 | { |
---|
| 835 | return mTesselationDomainProgramConstantFloatCount; |
---|
| 836 | } |
---|
| 837 | /// The number of integer constants fragment programs support |
---|
| 838 | ushort getTesselationDomainProgramConstantIntCount(void) const |
---|
| 839 | { |
---|
| 840 | return mTesselationDomainProgramConstantIntCount; |
---|
| 841 | } |
---|
| 842 | /// The number of boolean constants fragment programs support |
---|
| 843 | ushort getTesselationDomainProgramConstantBoolCount(void) const |
---|
| 844 | { |
---|
| 845 | return mTesselationDomainProgramConstantBoolCount; |
---|
| 846 | } |
---|
| 847 | |
---|
| 848 | /// The number of floating-point constants compute programs support |
---|
| 849 | void setComputeProgramConstantFloatCount(ushort c) |
---|
| 850 | { |
---|
| 851 | mComputeProgramConstantFloatCount = c; |
---|
| 852 | } |
---|
| 853 | /// The number of integer constants compute programs support |
---|
| 854 | void setComputeProgramConstantIntCount(ushort c) |
---|
| 855 | { |
---|
| 856 | mComputeProgramConstantIntCount = c; |
---|
| 857 | } |
---|
| 858 | /// The number of boolean constants compute programs support |
---|
| 859 | void setComputeProgramConstantBoolCount(ushort c) |
---|
| 860 | { |
---|
| 861 | mComputeProgramConstantBoolCount = c; |
---|
| 862 | } |
---|
| 863 | /// The number of floating-point constants fragment programs support |
---|
| 864 | ushort getComputeProgramConstantFloatCount(void) const |
---|
| 865 | { |
---|
| 866 | return mComputeProgramConstantFloatCount; |
---|
| 867 | } |
---|
| 868 | /// The number of integer constants fragment programs support |
---|
| 869 | ushort getComputeProgramConstantIntCount(void) const |
---|
| 870 | { |
---|
| 871 | return mComputeProgramConstantIntCount; |
---|
| 872 | } |
---|
| 873 | /// The number of boolean constants fragment programs support |
---|
| 874 | ushort getComputeProgramConstantBoolCount(void) const |
---|
| 875 | { |
---|
| 876 | return mComputeProgramConstantBoolCount; |
---|
| 877 | } |
---|
| 878 | |
---|
| 879 | }; |
---|
| 880 | |
---|
| 881 | /** @} */ |
---|
| 882 | /** @} */ |
---|
| 883 | } // namespace |
---|
| 884 | |
---|
| 885 | |
---|
| 886 | #include "OgreHeaderSuffix.h" |
---|
| 887 | |
---|
| 888 | #endif // __RenderSystemCapabilities__ |
---|
| 889 | |
---|