| 104 | } |
| 105 | |
| 106 | StateComponentPtr attributeToShaderState( const IECore::Object *attribute ) |
| 107 | { |
| 108 | const IECoreScene::Shader *shader = runTimeCast<const IECoreScene::Shader>( attribute ); |
| 109 | if( !shader ) |
| 110 | { |
| 111 | if( const IECoreScene::ShaderNetwork *n = runTimeCast<const IECoreScene::ShaderNetwork>( attribute ) ) |
| 112 | { |
| 113 | shader = n->outputShader(); |
| 114 | } |
| 115 | } |
| 116 | if( !shader ) |
| 117 | { |
| 118 | throw IECore::Exception( "Expected a Shader" ); |
| 119 | } |
| 120 | |
| 121 | const StringData *vertexSourceData = shader->parametersData()->member<StringData>( "gl:vertexSource" ); |
| 122 | const StringData *geometrySourceData = shader->parametersData()->member<StringData>( "gl:geometrySource" ); |
| 123 | const StringData *fragmentSourceData = shader->parametersData()->member<StringData>( "gl:fragmentSource" ); |
| 124 | |
| 125 | std::string vertexSource = vertexSourceData ? vertexSourceData->readable() : ""; |
| 126 | std::string geometrySource = geometrySourceData ? geometrySourceData->readable() : ""; |
| 127 | std::string fragmentSource = fragmentSourceData ? fragmentSourceData->readable() : ""; |
| 128 | |
| 129 | if( vertexSource == "" && geometrySource == "" && fragmentSource == "" ) |
| 130 | { |
| 131 | ShaderLoader::defaultShaderLoader()->loadSource( shader->getName(), vertexSource, geometrySource, fragmentSource ); |
| 132 | } |
| 133 | |
| 134 | CompoundObjectPtr parametersData = new CompoundObject; |
| 135 | for( CompoundDataMap::const_iterator it=shader->parameters().begin(); it!=shader->parameters().end(); it++ ) |
| 136 | { |
| 137 | if( it->first!="gl:fragmentSource" && it->first!="gl:geometrySource" && it->first!="gl:vertexSource" ) |
| 138 | { |
| 139 | parametersData->members()[it->first] = it->second; |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | return new ShaderStateComponent( ShaderLoader::defaultShaderLoader(), TextureLoader::defaultTextureLoader(), vertexSource, geometrySource, fragmentSource, parametersData ); |
| 144 | } |
| 145 | |
| 146 | StateComponentPtr attributeToColorState( const IECore::Object *attribute ) |
| 147 | { |
nothing calls this directly
no test coverage detected