Allow to filter graphical restrictions by vendor

This commit is contained in:
Deve 2017-10-18 20:51:26 +02:00
parent 204e715637
commit 9ec06f122c
3 changed files with 22 additions and 5 deletions

View File

@ -93,7 +93,8 @@ void CentralVideoSettings::init()
{
std::string driver((char*)(glGetString(GL_VERSION)));
std::string card((char*)(glGetString(GL_RENDERER)));
GraphicsRestrictions::init(driver, card);
std::string vendor((char*)(glGetString(GL_VENDOR)));
GraphicsRestrictions::init(driver, card, vendor);
if (GraphicsRestrictions::isDisabled(GraphicsRestrictions::GR_FORCE_LEGACY_DEVICE))
{

View File

@ -309,6 +309,9 @@ private:
/** For which OS this rule applies. */
std::string m_os;
/** For which vendor this rule applies. */
std::string m_vendor;
/** Which options to disable. */
std::vector<std::string> m_disable_options;
public:
@ -327,6 +330,7 @@ public:
}
rule->get("os", &m_os);
rule->get("vendor", &m_vendor);
std::string s;
if(rule->get("version", &s) && s.size()>1)
@ -358,7 +362,8 @@ public:
m_disable_options = StringUtils::split(s, ' ');
} // Rule
// ------------------------------------------------------------------------
bool applies(const std::string &card, const Version &version) const
bool applies(const std::string &card, const Version &version,
const std::string &vendor) const
{
// Test for OS
// -----------
@ -378,6 +383,14 @@ public:
return false;
#endif
} // m_os.size()>0
// Test for vendor
// ---------------
if (m_vendor.size() > 0)
{
if (m_vendor != vendor)
return false;
}
// Test for card
// -------------
@ -482,9 +495,11 @@ void unitTesting()
* \param driver_version The GL_VERSION string (i.e. opengl and version
* number).
* \param card_name The GL_RENDERER string (i.e. graphics card).
* \param vendor The GL_VENDOR string
*/
void init(const std::string &driver_version,
const std::string &card_name)
const std::string &card_name,
const std::string &vendor)
{
for (unsigned int i = 0; i < GR_COUNT; i++)
m_all_graphics_restriction.push_back(false);
@ -518,7 +533,7 @@ void init(const std::string &driver_version,
continue;
}
Rule rule(xml_rule);
if (rule.applies(card_name, version))
if (rule.applies(card_name, version, vendor))
{
std::vector<std::string> restrictions = rule.getRestrictions();
std::vector<std::string>::iterator p;

View File

@ -67,7 +67,8 @@ namespace GraphicsRestrictions
} ;
void init(const std::string &driver_version,
const std::string &card_name );
const std::string &card_name,
const std::string &vendor );
bool isDisabled(GraphicsRestrictionsType type);
void unitTesting();