MCPcopy Create free account
hub / github.com/ImageEngine/cortex / attributeToShaderState

Function attributeToShaderState

src/IECoreGL/ToGLStateConverter.cpp:106–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

104}
105
106StateComponentPtr 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
146StateComponentPtr attributeToColorState( const IECore::Object *attribute )
147{

Callers

nothing calls this directly

Calls 7

readableMethod · 0.80
outputShaderMethod · 0.45
parametersDataMethod · 0.45
loadSourceMethod · 0.45
beginMethod · 0.45
parametersMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected