forked from bartvdbraak/blender
Fix T47869: OpenColorIO Error with unicode path to config file under Windows
This commit is contained in:
parent
6a4967ca6e
commit
ab4307aa08
@ -25,6 +25,7 @@
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string.h>
|
||||
@ -55,6 +56,19 @@ using namespace OCIO_NAMESPACE;
|
||||
# define __func__ __FUNCTION__
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifndef NOGDI
|
||||
# define NOGDI
|
||||
# endif
|
||||
# ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
# endif
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
static void OCIO_reportError(const char *err)
|
||||
{
|
||||
std::cerr << "OpenColorIO Error: " << err << std::endl;
|
||||
@ -121,7 +135,26 @@ OCIO_ConstConfigRcPtr *OCIOImpl::configCreateFromFile(const char *filename)
|
||||
ConstConfigRcPtr *config = OBJECT_GUARDED_NEW(ConstConfigRcPtr);
|
||||
|
||||
try {
|
||||
*config = Config::CreateFromFile(filename);
|
||||
#ifdef _WIN32
|
||||
const int length_mb = strlen(filename);
|
||||
const int length_wc = MultiByteToWideChar(CP_UTF8,
|
||||
0,
|
||||
filename,
|
||||
length_mb,
|
||||
NULL,
|
||||
0);
|
||||
std::wstring wfilename(length_wc, 0);
|
||||
MultiByteToWideChar(CP_UTF8,
|
||||
0,
|
||||
filename,
|
||||
length_mb,
|
||||
&wfilename[0],
|
||||
length_wc);
|
||||
std::fstream stream(wfilename);
|
||||
#else
|
||||
std::fstream stream(filename);
|
||||
#endif
|
||||
*config = Config::CreateFromStream(stream);
|
||||
|
||||
if (*config)
|
||||
return (OCIO_ConstConfigRcPtr *) config;
|
||||
@ -622,7 +655,7 @@ void OCIOImpl::matrixTransformScale(float *m44, float *offset4, const float *sca
|
||||
|
||||
const char *OCIOImpl::getVersionString(void)
|
||||
{
|
||||
return GetVersion();
|
||||
return OCIO_NAMESPACE::GetVersion();
|
||||
}
|
||||
|
||||
int OCIOImpl::getVersionHex(void)
|
||||
|
@ -635,18 +635,7 @@ void colormanagement_init(void)
|
||||
|
||||
if (configdir) {
|
||||
BLI_join_dirfile(configfile, sizeof(configfile), configdir, BCM_CONFIG_FILE);
|
||||
|
||||
#ifdef WIN32
|
||||
{
|
||||
/* quite a hack to support loading configuration from path with non-acii symbols */
|
||||
|
||||
char short_name[256];
|
||||
BLI_get_short_name(short_name, configfile);
|
||||
config = OCIO_configCreateFromFile(short_name);
|
||||
}
|
||||
#else
|
||||
config = OCIO_configCreateFromFile(configfile);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user