+ bool ApplyNativeFragmentShader(std::string& shader, const char* customSamplerType)
+ {
+ bool modified = false;
+ std::string versionString = "#version";
+ size_t versionPosition = shader.find(versionString);
+ if(versionPosition != std::string::npos)
+ {
+ std::string extensionString;
+ size_t shadingLanguageVersionPosition = shader.find_first_not_of(" \t", versionPosition + versionString.length());
+ if(shadingLanguageVersionPosition != std::string::npos &&
+ shader.substr(shadingLanguageVersionPosition, 3) == LEGACY_SHADING_LANGUAGE_VERSION)
+ {
+ extensionString = OES_EGL_IMAGE_EXTERNAL_STRING;
+ }
+ else
+ {
+ extensionString = OES_EGL_IMAGE_EXTERNAL_STRING_ESSL3;
+ }
+
+ if(shader.find(extensionString) == std::string::npos)
+ {
+ modified = true;
+ size_t extensionPosition = shader.find_first_of("\n", versionPosition) + 1;
+ shader.insert(extensionPosition, extensionString);
+ }
+ }
+ else
+ {
+ if(shader.find(OES_EGL_IMAGE_EXTERNAL_STRING) == std::string::npos)
+ {
+ modified = true;
+ shader = OES_EGL_IMAGE_EXTERNAL_STRING + shader;
+ }
+ }
+
+ if(shader.find(customSamplerType) == std::string::npos)
+ {
+ size_t pos = shader.find(DEFAULT_SAMPLER_TYPE);
+ if(pos != std::string::npos)
+ {
+ modified = true;
+ shader.replace(pos, strlen(DEFAULT_SAMPLER_TYPE), customSamplerType);
+ }
+ }
+
+ return modified;
+ }
+