OpenColorIO: remove default display workaround
A fix for this is in 2.0 (and recent 1.1.x versions), no need for this anymore. Differential Revision: https://developer.blender.org/D10275
This commit is contained in:
parent
5393054a5d
commit
6b40ee608c
@ -50,27 +50,6 @@ using namespace OCIO_NAMESPACE;
|
||||
# define __func__ __FUNCTION__
|
||||
#endif
|
||||
|
||||
/* NOTE: This is because OCIO 1.1.0 has a bug which makes default
|
||||
* display to be the one which is first alphabetically.
|
||||
*
|
||||
* Fix has been submitted as a patch
|
||||
* https://github.com/imageworks/OpenColorIO/pull/638
|
||||
*
|
||||
* For until then we use first usable display instead. */
|
||||
#define DEFAULT_DISPLAY_WORKAROUND
|
||||
#ifdef DEFAULT_DISPLAY_WORKAROUND
|
||||
# include <algorithm>
|
||||
# include <map>
|
||||
# include <mutex>
|
||||
# include <set>
|
||||
# include <string>
|
||||
# include <vector>
|
||||
using std::map;
|
||||
using std::set;
|
||||
using std::string;
|
||||
using std::vector;
|
||||
#endif
|
||||
|
||||
static void OCIO_reportError(const char *err)
|
||||
{
|
||||
std::cerr << "OpenColorIO Error: " << err << std::endl;
|
||||
@ -213,30 +192,6 @@ int OCIOImpl::configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const c
|
||||
|
||||
const char *OCIOImpl::configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config)
|
||||
{
|
||||
#ifdef DEFAULT_DISPLAY_WORKAROUND
|
||||
if (getenv("OCIO_ACTIVE_DISPLAYS") == NULL) {
|
||||
const char *active_displays = (*(ConstConfigRcPtr *)config)->getActiveDisplays();
|
||||
if (active_displays[0] != '\0') {
|
||||
const char *separator_pos = strchr(active_displays, ',');
|
||||
if (separator_pos == NULL) {
|
||||
return active_displays;
|
||||
}
|
||||
static std::string active_display;
|
||||
/* NOTE: Configuration is shared and is never changed during
|
||||
* runtime, so we only guarantee two threads don't initialize at the
|
||||
* same. */
|
||||
static std::mutex mutex;
|
||||
mutex.lock();
|
||||
if (active_display.empty()) {
|
||||
active_display = active_displays;
|
||||
active_display[separator_pos - active_displays] = '\0';
|
||||
}
|
||||
mutex.unlock();
|
||||
return active_display.c_str();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
try {
|
||||
return (*(ConstConfigRcPtr *)config)->getDefaultDisplay();
|
||||
}
|
||||
@ -271,90 +226,8 @@ const char *OCIOImpl::configGetDisplay(OCIO_ConstConfigRcPtr *config, int index)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef DEFAULT_DISPLAY_WORKAROUND
|
||||
namespace {
|
||||
|
||||
void splitStringEnvStyle(vector<string> *tokens, const string &str)
|
||||
{
|
||||
tokens->clear();
|
||||
const int len = str.length();
|
||||
int token_start = 0, token_length = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
const char ch = str[i];
|
||||
if (ch != ',' && ch != ':') {
|
||||
/* Append non-separator char to a token. */
|
||||
++token_length;
|
||||
}
|
||||
else {
|
||||
/* Append current token to the list (if any). */
|
||||
if (token_length > 0) {
|
||||
string token = str.substr(token_start, token_length);
|
||||
tokens->push_back(token);
|
||||
}
|
||||
/* Re-set token pointers. */
|
||||
token_start = i + 1;
|
||||
token_length = 0;
|
||||
}
|
||||
}
|
||||
/* Append token which might be at the end of the string. */
|
||||
if (token_length != 0) {
|
||||
string token = str.substr(token_start, token_length);
|
||||
tokens->push_back(token);
|
||||
}
|
||||
}
|
||||
|
||||
string stringToLower(const string &str)
|
||||
{
|
||||
string lower = str;
|
||||
std::transform(lower.begin(), lower.end(), lower.begin(), tolower);
|
||||
return lower;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
#endif
|
||||
|
||||
const char *OCIOImpl::configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display)
|
||||
{
|
||||
#ifdef DEFAULT_DISPLAY_WORKAROUND
|
||||
/* NOTE: We assume that first active view always exists for a default
|
||||
* display. */
|
||||
if (getenv("OCIO_ACTIVE_VIEWS") == NULL) {
|
||||
ConstConfigRcPtr config_ptr = *((ConstConfigRcPtr *)config);
|
||||
const char *active_views_encoded = config_ptr->getActiveViews();
|
||||
if (active_views_encoded[0] != '\0') {
|
||||
const string display_lower = stringToLower(display);
|
||||
static map<string, string> default_display_views;
|
||||
static std::mutex mutex;
|
||||
mutex.lock();
|
||||
/* Check if the view is already known. */
|
||||
map<string, string>::const_iterator it = default_display_views.find(display_lower);
|
||||
if (it != default_display_views.end()) {
|
||||
mutex.unlock();
|
||||
return it->second.c_str();
|
||||
}
|
||||
/* Active views. */
|
||||
vector<string> active_views;
|
||||
splitStringEnvStyle(&active_views, active_views_encoded);
|
||||
/* Get all views supported by tge display. */
|
||||
set<string> display_views;
|
||||
const int num_display_views = config_ptr->getNumViews(display);
|
||||
for (int view_index = 0; view_index < num_display_views; ++view_index) {
|
||||
const char *view = config_ptr->getView(display, view_index);
|
||||
display_views.insert(stringToLower(view));
|
||||
}
|
||||
/* Get first view which is supported by tge display. */
|
||||
for (const string &view : active_views) {
|
||||
const string view_lower = stringToLower(view);
|
||||
if (display_views.find(view_lower) != display_views.end()) {
|
||||
default_display_views[display_lower] = view;
|
||||
mutex.unlock();
|
||||
return default_display_views[display_lower].c_str();
|
||||
}
|
||||
}
|
||||
mutex.unlock();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
try {
|
||||
return (*(ConstConfigRcPtr *)config)->getDefaultView(display);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user