OgreRenderSystemCapabilities.h
Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004 (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2013 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 #ifndef __RenderSystemCapabilities__
00029 #define __RenderSystemCapabilities__
00030 
00031 // Precompiler options
00032 #include "OgrePrerequisites.h"
00033 #include "OgreString.h"
00034 #include "OgreStringConverter.h"
00035 #include "OgreStringVector.h"
00036 #include "OgreResource.h"
00037 #include "OgreLogManager.h"
00038 #include "OgreHeaderPrefix.h"
00039 
00040 // Because there are more than 32 possible Capabilities, more than 1 int is needed to store them all.
00041 // In fact, an array of integers is used to store capabilities. However all the capabilities are defined in the single
00042 // enum. The only way to know which capabilities should be stored where in the array is to use some of the 32 bits
00043 // to record the category of the capability.  These top few bits are used as an index into mCapabilities array
00044 // The lower bits are used to identify each capability individually by setting 1 bit for each
00045 
00046 // Identifies how many bits are reserved for categories
00047 // NOTE: Although 4 bits (currently) are enough
00048 #define CAPS_CATEGORY_SIZE 4
00049 #define OGRE_CAPS_BITSHIFT (32 - CAPS_CATEGORY_SIZE)
00050 #define CAPS_CATEGORY_MASK (((1 << CAPS_CATEGORY_SIZE) - 1) << OGRE_CAPS_BITSHIFT)
00051 #define OGRE_CAPS_VALUE(cat, val) ((cat << OGRE_CAPS_BITSHIFT) | (1 << val))
00052 
00053 namespace Ogre 
00054 {
00062 
00063     enum CapabilitiesCategory
00064     {
00065         CAPS_CATEGORY_COMMON = 0,
00066         CAPS_CATEGORY_COMMON_2 = 1,
00067         CAPS_CATEGORY_D3D9 = 2,
00068         CAPS_CATEGORY_GL = 3,
00070         CAPS_CATEGORY_COUNT = 4
00071     };
00072 
00075     // a is the category (which can be from 0 to 15)
00076     // b is the value (from 0 to 27)
00077     enum Capabilities
00078     {
00080         RSC_AUTOMIPMAP              = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 0),
00081         RSC_BLENDING                = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 1),
00083         RSC_ANISOTROPY              = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 2),
00085         RSC_DOT3                    = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 3),
00087         RSC_CUBEMAPPING             = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 4),
00089         RSC_HWSTENCIL               = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 5),
00091         RSC_VBO                     = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 7),
00093         RSC_VERTEX_PROGRAM          = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 9),
00095         RSC_FRAGMENT_PROGRAM        = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 10),
00097         RSC_SCISSOR_TEST            = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 11),
00099         RSC_TWO_SIDED_STENCIL       = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 12),
00101         RSC_STENCIL_WRAP            = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 13),
00103         RSC_HWOCCLUSION             = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 14),
00105         RSC_USER_CLIP_PLANES        = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 15),
00107         RSC_VERTEX_FORMAT_UBYTE4    = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 16),
00109         RSC_INFINITE_FAR_PLANE      = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 17),
00111         RSC_HWRENDER_TO_TEXTURE     = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 18),
00113         RSC_TEXTURE_FLOAT           = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 19),
00115         RSC_NON_POWER_OF_2_TEXTURES = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 20),
00117         RSC_TEXTURE_3D              = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 21),
00119         RSC_POINT_SPRITES           = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 22),
00121         RSC_POINT_EXTENDED_PARAMETERS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 23),
00123         RSC_VERTEX_TEXTURE_FETCH = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 24),
00125         RSC_MIPMAP_LOD_BIAS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 25),
00127         RSC_GEOMETRY_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 26),
00129         RSC_HWRENDER_TO_VERTEX_BUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON, 27),
00130 
00132         RSC_TEXTURE_COMPRESSION = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 0),
00134         RSC_TEXTURE_COMPRESSION_DXT = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 1),
00136         RSC_TEXTURE_COMPRESSION_VTC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 2),
00138         RSC_TEXTURE_COMPRESSION_PVRTC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 3),
00140         RSC_TEXTURE_COMPRESSION_ATC = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 4),
00142         RSC_TEXTURE_COMPRESSION_ETC1 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 5),
00144         RSC_TEXTURE_COMPRESSION_ETC2 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 6),
00146         RSC_TEXTURE_COMPRESSION_BC4_BC5 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 7),
00148         RSC_TEXTURE_COMPRESSION_BC6H_BC7 = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 8),
00150         RSC_FIXED_FUNCTION = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 9),
00152         RSC_MRT_DIFFERENT_BIT_DEPTHS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 10),
00154         RSC_ALPHA_TO_COVERAGE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 11),
00156         RSC_ADVANCED_BLEND_OPERATIONS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 12),
00158         RSC_RTT_SEPARATE_DEPTHBUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 13),
00161         RSC_RTT_MAIN_DEPTHBUFFER_ATTACHABLE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 14),
00164         RSC_RTT_DEPTHBUFFER_RESOLUTION_LESSEQUAL = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 15),
00166         RSC_VERTEX_BUFFER_INSTANCE_DATA = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 16),
00168         RSC_CAN_GET_COMPILED_SHADER_BUFFER = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 17),
00170         RSC_SHADER_SUBROUTINE = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 18),
00171 
00172         RSC_HWRENDER_TO_TEXTURE_3D = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 19),
00174         RSC_TEXTURE_1D              = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 20),
00176         RSC_TESSELATION_HULL_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 21),
00178         RSC_TESSELATION_DOMAIN_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 22),
00180         RSC_COMPUTE_PROGRAM = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 23),
00182         RSC_HWOCCLUSION_ASYNCHRONOUS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 24),
00184         RSC_ATOMIC_COUNTERS = OGRE_CAPS_VALUE(CAPS_CATEGORY_COMMON_2, 25),
00185 
00186         // ***** DirectX specific caps *****
00188         RSC_PERSTAGECONSTANT = OGRE_CAPS_VALUE(CAPS_CATEGORY_D3D9, 0),
00189 
00190         // ***** GL Specific Caps *****
00192         RSC_GL1_5_NOVBO    = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 1),
00194         RSC_FBO              = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 2),
00196         RSC_FBO_ARB          = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 3),
00198         RSC_FBO_ATI          = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 4),
00200         RSC_PBUFFER          = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 5),
00202         RSC_GL1_5_NOHWOCCLUSION = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 6),
00204         RSC_POINT_EXTENDED_PARAMETERS_ARB = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 7),
00206         RSC_POINT_EXTENDED_PARAMETERS_EXT = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 8),
00208         RSC_SEPARATE_SHADER_OBJECTS = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 9),
00210         RSC_VAO              = OGRE_CAPS_VALUE(CAPS_CATEGORY_GL, 10)
00211     };
00212 
00215     struct _OgreExport DriverVersion 
00216     {
00217         int major;
00218         int minor;
00219         int release;
00220         int build;
00221 
00222         DriverVersion() 
00223         {
00224             major = minor = release = build = 0;
00225         }
00226 
00227         String toString() const 
00228         {
00229             StringUtil::StrStreamType str;
00230             str << major << "." << minor << "." << release << "." << build;
00231             return str.str();
00232         }
00233 
00234         void fromString(const String& versionString)
00235         {
00236             StringVector tokens = StringUtil::split(versionString, ".");
00237             if(!tokens.empty())
00238             {
00239                 major = StringConverter::parseInt(tokens[0]);
00240                 if (tokens.size() > 1)
00241                     minor = StringConverter::parseInt(tokens[1]);
00242                 if (tokens.size() > 2)
00243                     release = StringConverter::parseInt(tokens[2]);
00244                 if (tokens.size() > 3)
00245                     build = StringConverter::parseInt(tokens[3]);
00246             }
00247 
00248         }
00249     };
00250 
00252     enum GPUVendor
00253     {
00254         GPU_UNKNOWN = 0,
00255         GPU_NVIDIA = 1,
00256         GPU_AMD = 2,
00257         GPU_INTEL = 3,
00258         GPU_S3 = 4,
00259         GPU_MATROX = 5,
00260         GPU_3DLABS = 6,
00261         GPU_SIS = 7,
00262         GPU_IMAGINATION_TECHNOLOGIES = 8,
00263         GPU_APPLE = 9,  // Apple Software Renderer
00264         GPU_NOKIA = 10,
00265         GPU_MS_SOFTWARE = 11, // Microsoft software device
00266         GPU_MS_WARP = 12, // Microsoft WARP (Windows Advanced Rasterization Platform) software device - http://msdn.microsoft.com/en-us/library/dd285359.aspx
00267         GPU_ARM = 13, // For the Mali chipsets
00268         GPU_QUALCOMM = 14,
00269 
00271         GPU_VENDOR_COUNT = 15
00272     };
00273 
00279     class _OgreExport RenderSystemCapabilities : public RenderSysAlloc
00280     {
00281 
00282     public:
00283 
00284         typedef set<String>::type ShaderProfiles;
00285     private:
00289         DriverVersion mDriverVersion;
00291         GPUVendor mVendor;
00292 
00293         static StringVector msGPUVendorStrings;
00294         static void initVendorStrings();
00295 
00297         ushort mNumWorldMatrices;
00299         ushort mNumTextureUnits;
00301         ushort mStencilBufferBitDepth;
00303         ushort mNumVertexBlendMatrices;
00305         int mCapabilities[CAPS_CATEGORY_COUNT];
00307         bool mCategoryRelevant[CAPS_CATEGORY_COUNT];
00309         String mDeviceName;
00311         String mRenderSystemName;
00312 
00314         ushort mVertexProgramConstantFloatCount;           
00316         ushort mVertexProgramConstantIntCount;           
00318         ushort mVertexProgramConstantBoolCount;           
00320         ushort mGeometryProgramConstantFloatCount;           
00322         ushort mGeometryProgramConstantIntCount;           
00324         ushort mGeometryProgramConstantBoolCount;           
00326         ushort mFragmentProgramConstantFloatCount;           
00328         ushort mFragmentProgramConstantIntCount;           
00330         ushort mFragmentProgramConstantBoolCount;
00332         ushort mNumMultiRenderTargets;
00334         Real mMaxPointSize;
00336         bool mNonPOW2TexturesLimited;
00338         Real mMaxSupportedAnisotropy;
00340         ushort mNumVertexTextureUnits;
00342         bool mVertexTextureUnitsShared;
00344         int mGeometryProgramNumOutputVertices;
00345 
00346 
00348         ShaderProfiles mSupportedShaderProfiles;
00349 
00350         // Support for new shader stages in shader model 5.0
00352         ushort mTesselationHullProgramConstantFloatCount;           
00354         ushort mTesselationHullProgramConstantIntCount;           
00356         ushort mTesselationHullProgramConstantBoolCount;
00358         ushort mTesselationDomainProgramConstantFloatCount;           
00360         ushort mTesselationDomainProgramConstantIntCount;           
00362         ushort mTesselationDomainProgramConstantBoolCount;
00364         ushort mComputeProgramConstantFloatCount;           
00366         ushort mComputeProgramConstantIntCount;           
00368         ushort mComputeProgramConstantBoolCount;
00369 
00370 
00371 
00372     public: 
00373         RenderSystemCapabilities ();
00374         virtual ~RenderSystemCapabilities ();
00375 
00376         virtual size_t calculateSize() const {return 0;}
00377 
00379         void setDriverVersion(const DriverVersion& version)
00380         {
00381             mDriverVersion = version;
00382         }
00383 
00384         void parseDriverVersionFromString(const String& versionString)
00385         {
00386             DriverVersion version;
00387             version.fromString(versionString);
00388             setDriverVersion(version);
00389         }
00390 
00391 
00392         DriverVersion getDriverVersion() const
00393         {
00394             return mDriverVersion;
00395         }
00396 
00397         GPUVendor getVendor() const
00398         {
00399             return mVendor;
00400         }
00401 
00402         void setVendor(GPUVendor v)
00403         {
00404             mVendor = v;
00405         }
00406 
00408         void parseVendorFromString(const String& vendorString)
00409         {
00410             setVendor(vendorFromString(vendorString));
00411         }
00412 
00414         static GPUVendor vendorFromString(const String& vendorString);
00416         static String vendorToString(GPUVendor v);
00417 
00418         bool isDriverOlderThanVersion(DriverVersion v) const
00419         {
00420             if (mDriverVersion.major < v.major)
00421                 return true;
00422             else if (mDriverVersion.major == v.major && 
00423                 mDriverVersion.minor < v.minor)
00424                 return true;
00425             else if (mDriverVersion.major == v.major && 
00426                 mDriverVersion.minor == v.minor && 
00427                 mDriverVersion.release < v.release)
00428                 return true;
00429             else if (mDriverVersion.major == v.major && 
00430                 mDriverVersion.minor == v.minor && 
00431                 mDriverVersion.release == v.release &&
00432                 mDriverVersion.build < v.build)
00433                 return true;
00434             return false;
00435         }
00436 
00437         void setNumWorldMatrices(ushort num)
00438         {
00439             mNumWorldMatrices = num;
00440         }
00441 
00442         void setNumTextureUnits(ushort num)
00443         {
00444             mNumTextureUnits = num;
00445         }
00446 
00447         void setStencilBufferBitDepth(ushort num)
00448         {
00449             mStencilBufferBitDepth = num;
00450         }
00451 
00452         void setNumVertexBlendMatrices(ushort num)
00453         {
00454             mNumVertexBlendMatrices = num;
00455         }
00456 
00458         void setNumMultiRenderTargets(ushort num)
00459         {
00460             mNumMultiRenderTargets = num;
00461         }
00462 
00463         ushort getNumWorldMatrices(void) const
00464         { 
00465             return mNumWorldMatrices;
00466         }
00467 
00480         ushort getNumTextureUnits(void) const
00481         {
00482             return mNumTextureUnits;
00483         }
00484 
00491         ushort getStencilBufferBitDepth(void) const
00492         {
00493             return mStencilBufferBitDepth;
00494         }
00495 
00498         ushort getNumVertexBlendMatrices(void) const
00499         {
00500             return mNumVertexBlendMatrices;
00501         }
00502 
00504         ushort getNumMultiRenderTargets(void) const
00505         {
00506             return mNumMultiRenderTargets;
00507         }
00508 
00511         bool isCapabilityRenderSystemSpecific(const Capabilities c) const
00512         {
00513             int cat = c >> OGRE_CAPS_BITSHIFT;
00514             if(cat == CAPS_CATEGORY_GL || cat == CAPS_CATEGORY_D3D9)
00515                 return true;
00516             return false;
00517         }
00518 
00521         void setCapability(const Capabilities c) 
00522         { 
00523             int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT;
00524             // zero out the index from the stored capability
00525             mCapabilities[index] |= (c & ~CAPS_CATEGORY_MASK);
00526         }
00527 
00530         void unsetCapability(const Capabilities c) 
00531         { 
00532             int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT;
00533             // zero out the index from the stored capability
00534             mCapabilities[index] &= (~c | CAPS_CATEGORY_MASK);
00535         }
00536 
00539         bool hasCapability(const Capabilities c) const
00540         {
00541             int index = (CAPS_CATEGORY_MASK & c) >> OGRE_CAPS_BITSHIFT;
00542             // test against
00543             if(mCapabilities[index] & (c & ~CAPS_CATEGORY_MASK))
00544             {
00545                 return true;
00546             }
00547             else
00548             {
00549                 return false;
00550             }
00551         }
00552 
00555         void addShaderProfile(const String& profile)
00556         {
00557             mSupportedShaderProfiles.insert(profile);
00558 
00559         }
00560 
00563         void removeShaderProfile(const String& profile)
00564         {
00565             mSupportedShaderProfiles.erase(profile);
00566         }
00567 
00570         bool isShaderProfileSupported(const String& profile) const
00571         {
00572             return (mSupportedShaderProfiles.end() != mSupportedShaderProfiles.find(profile));
00573         }
00574 
00575 
00578         const ShaderProfiles& getSupportedShaderProfiles() const
00579         {
00580             return mSupportedShaderProfiles;
00581         }
00582 
00583 
00585         ushort getVertexProgramConstantFloatCount(void) const
00586         {
00587             return mVertexProgramConstantFloatCount;           
00588         }
00590         ushort getVertexProgramConstantIntCount(void) const
00591         {
00592             return mVertexProgramConstantIntCount;           
00593         }
00595         ushort getVertexProgramConstantBoolCount(void) const
00596         {
00597             return mVertexProgramConstantBoolCount;           
00598         }
00600         ushort getGeometryProgramConstantFloatCount(void) const
00601         {
00602             return mGeometryProgramConstantFloatCount;           
00603         }
00605         ushort getGeometryProgramConstantIntCount(void) const
00606         {
00607             return mGeometryProgramConstantIntCount;           
00608         }
00610         ushort getGeometryProgramConstantBoolCount(void) const
00611         {
00612             return mGeometryProgramConstantBoolCount;           
00613         }
00615         ushort getFragmentProgramConstantFloatCount(void) const
00616         {
00617             return mFragmentProgramConstantFloatCount;           
00618         }
00620         ushort getFragmentProgramConstantIntCount(void) const
00621         {
00622             return mFragmentProgramConstantIntCount;           
00623         }
00625         ushort getFragmentProgramConstantBoolCount(void) const
00626         {
00627             return mFragmentProgramConstantBoolCount;           
00628         }
00629 
00631         void setDeviceName(const String& name)
00632         {
00633             mDeviceName = name;
00634         }
00635 
00637         String getDeviceName() const
00638         {
00639             return mDeviceName;
00640         }
00641 
00643         void setVertexProgramConstantFloatCount(ushort c)
00644         {
00645             mVertexProgramConstantFloatCount = c;           
00646         }
00648         void setVertexProgramConstantIntCount(ushort c)
00649         {
00650             mVertexProgramConstantIntCount = c;           
00651         }
00653         void setVertexProgramConstantBoolCount(ushort c)
00654         {
00655             mVertexProgramConstantBoolCount = c;           
00656         }
00658         void setGeometryProgramConstantFloatCount(ushort c)
00659         {
00660             mGeometryProgramConstantFloatCount = c;           
00661         }
00663         void setGeometryProgramConstantIntCount(ushort c)
00664         {
00665             mGeometryProgramConstantIntCount = c;           
00666         }
00668         void setGeometryProgramConstantBoolCount(ushort c)
00669         {
00670             mGeometryProgramConstantBoolCount = c;           
00671         }
00673         void setFragmentProgramConstantFloatCount(ushort c)
00674         {
00675             mFragmentProgramConstantFloatCount = c;           
00676         }
00678         void setFragmentProgramConstantIntCount(ushort c)
00679         {
00680             mFragmentProgramConstantIntCount = c;           
00681         }
00683         void setFragmentProgramConstantBoolCount(ushort c)
00684         {
00685             mFragmentProgramConstantBoolCount = c;           
00686         }
00688         void setMaxPointSize(Real s)
00689         {
00690             mMaxPointSize = s;
00691         }
00693         Real getMaxPointSize(void) const
00694         {
00695             return mMaxPointSize;
00696         }
00698         void setNonPOW2TexturesLimited(bool l)
00699         {
00700             mNonPOW2TexturesLimited = l;
00701         }
00710         bool getNonPOW2TexturesLimited(void) const
00711         {
00712             return mNonPOW2TexturesLimited;
00713         }
00715         void setMaxSupportedAnisotropy(Real s)
00716         {
00717             mMaxSupportedAnisotropy = s;
00718         }
00720         Real getMaxSupportedAnisotropy()
00721         {
00722             return mMaxSupportedAnisotropy;
00723         }
00724 
00726         void setNumVertexTextureUnits(ushort n)
00727         {
00728             mNumVertexTextureUnits = n;
00729         }
00731         ushort getNumVertexTextureUnits(void) const
00732         {
00733             return mNumVertexTextureUnits;
00734         }
00736         void setVertexTextureUnitsShared(bool shared)
00737         {
00738             mVertexTextureUnitsShared = shared;
00739         }
00741         bool getVertexTextureUnitsShared(void) const
00742         {
00743             return mVertexTextureUnitsShared;
00744         }
00745 
00747         void setGeometryProgramNumOutputVertices(int numOutputVertices)
00748         {
00749             mGeometryProgramNumOutputVertices = numOutputVertices;
00750         }
00752         int getGeometryProgramNumOutputVertices(void) const
00753         {
00754             return mGeometryProgramNumOutputVertices;
00755         }
00756 
00758         String getRenderSystemName(void) const
00759         {
00760             return mRenderSystemName;
00761         }
00763         void setRenderSystemName(const String& rs)
00764         {
00765             mRenderSystemName = rs;
00766         }
00767 
00769         void setCategoryRelevant(CapabilitiesCategory cat, bool relevant)
00770         {
00771             mCategoryRelevant[cat] = relevant;
00772         }
00773 
00775         bool isCategoryRelevant(CapabilitiesCategory cat)
00776         {
00777             return mCategoryRelevant[cat];
00778         }
00779 
00780 
00781 
00783         void log(Log* pLog);
00784 
00785         // Support for new shader stages in shader model 5.0
00787         void setTesselationHullProgramConstantFloatCount(ushort c)
00788         {
00789             mTesselationHullProgramConstantFloatCount = c;           
00790         }
00792         void setTesselationHullProgramConstantIntCount(ushort c)
00793         {
00794             mTesselationHullProgramConstantIntCount = c;           
00795         }
00797         void setTesselationHullProgramConstantBoolCount(ushort c)
00798         {
00799             mTesselationHullProgramConstantBoolCount = c;           
00800         }
00802         ushort getTesselationHullProgramConstantFloatCount(void) const
00803         {
00804             return mTesselationHullProgramConstantFloatCount;           
00805         }
00807         ushort getTesselationHullProgramConstantIntCount(void) const
00808         {
00809             return mTesselationHullProgramConstantIntCount;           
00810         }
00812         ushort getTesselationHullProgramConstantBoolCount(void) const
00813         {
00814             return mTesselationHullProgramConstantBoolCount;           
00815         }
00816 
00818         void setTesselationDomainProgramConstantFloatCount(ushort c)
00819         {
00820             mTesselationDomainProgramConstantFloatCount = c;           
00821         }
00823         void setTesselationDomainProgramConstantIntCount(ushort c)
00824         {
00825             mTesselationDomainProgramConstantIntCount = c;           
00826         }
00828         void setTesselationDomainProgramConstantBoolCount(ushort c)
00829         {
00830             mTesselationDomainProgramConstantBoolCount = c;           
00831         }
00833         ushort getTesselationDomainProgramConstantFloatCount(void) const
00834         {
00835             return mTesselationDomainProgramConstantFloatCount;           
00836         }
00838         ushort getTesselationDomainProgramConstantIntCount(void) const
00839         {
00840             return mTesselationDomainProgramConstantIntCount;           
00841         }
00843         ushort getTesselationDomainProgramConstantBoolCount(void) const
00844         {
00845             return mTesselationDomainProgramConstantBoolCount;           
00846         }
00847 
00849         void setComputeProgramConstantFloatCount(ushort c)
00850         {
00851             mComputeProgramConstantFloatCount = c;           
00852         }
00854         void setComputeProgramConstantIntCount(ushort c)
00855         {
00856             mComputeProgramConstantIntCount = c;           
00857         }
00859         void setComputeProgramConstantBoolCount(ushort c)
00860         {
00861             mComputeProgramConstantBoolCount = c;           
00862         }
00864         ushort getComputeProgramConstantFloatCount(void) const
00865         {
00866             return mComputeProgramConstantFloatCount;           
00867         }
00869         ushort getComputeProgramConstantIntCount(void) const
00870         {
00871             return mComputeProgramConstantIntCount;           
00872         }
00874         ushort getComputeProgramConstantBoolCount(void) const
00875         {
00876             return mComputeProgramConstantBoolCount;           
00877         }
00878 
00879     };
00880 
00883 } // namespace
00884 
00885 
00886 #include "OgreHeaderSuffix.h"
00887 
00888 #endif // __RenderSystemCapabilities__
00889 

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:45