bool Shader::BeginLoad(Deserializer& source) { Graphics* graphics = GetSubsystem<Graphics>(); if (!graphics) return false; // Load the shader source code and resolve any includes timeStamp_ = 0; String shaderCode; if (!ProcessSource(shaderCode, source)) return false; // Comment out the unneeded shader function vsSourceCode_ = shaderCode; psSourceCode_ = shaderCode; CommentOutFunction(vsSourceCode_, "void PS("); CommentOutFunction(psSourceCode_, "void VS("); // OpenGL: rename either VS() or PS() to main(), comment out vertex attributes in pixel shaders #ifdef URHO3D_OPENGL vsSourceCode_.Replace("void VS(", "void main("); psSourceCode_.Replace("void PS(", "void main("); psSourceCode_.Replace("attribute ", "// attribute "); #endif RefreshMemoryUse(); return true; }
bool Shader::Load(Deserializer& source) { PROFILE(LoadShader); Graphics* graphics = GetSubsystem<Graphics>(); if (!graphics) return false; // Load the shader source code and resolve any includes timeStamp_ = 0; String shaderCode; if (!ProcessSource(shaderCode, source)) return false; // Comment out the unneeded shader function vsSourceCode_ = shaderCode; psSourceCode_ = shaderCode; CommentOutFunction(vsSourceCode_, "void PS("); CommentOutFunction(psSourceCode_, "void VS("); // OpenGL: rename either VS() or PS() to main(), comment out vertex attributes in pixel shaders #ifdef USE_OPENGL vsSourceCode_.Replace("void VS(", "void main("); psSourceCode_.Replace("void PS(", "void main("); psSourceCode_.Replace("attribute ", "// attribute "); #endif // If variations had already been created, release them and require recompile for (HashMap<StringHash, SharedPtr<ShaderVariation> >::Iterator i = vsVariations_.Begin(); i != vsVariations_.End(); ++i) i->second_->Release(); for (HashMap<StringHash, SharedPtr<ShaderVariation> >::Iterator i = psVariations_.Begin(); i != psVariations_.End(); ++i) i->second_->Release(); RefreshMemoryUse(); return true; }