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

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:45