MCPcopy Create free account
hub / github.com/AcademySoftwareFoundation/MaterialX / build

Method build

source/MaterialXRenderGlsl/GlslProgram.cpp:85–217  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

83}
84
85void GlslProgram::build()
86{
87 MX_TRACE_FUNCTION(Tracing::Category::Render);
88
89 clearBuiltData();
90
91 GLint glStatus = GL_FALSE;
92 int glInfoLogLength = 0;
93 StringVec errors;
94
95 unsigned int stagesBuilt = 0;
96 unsigned int desiredStages = 0;
97 for (const auto& it : _stages)
98 {
99 if (!it.second.empty())
100 {
101 desiredStages++;
102 }
103 }
104
105 // Compile vertex shader, if any
106 GLuint vertexShaderId = UNDEFINED_OPENGL_RESOURCE_ID;
107 const string& vertexShaderSource = _stages[Stage::VERTEX];
108 if (!vertexShaderSource.empty())
109 {
110 vertexShaderId = glCreateShader(GL_VERTEX_SHADER);
111
112 // Compile vertex shader
113 const char* vertexChar = vertexShaderSource.c_str();
114 glShaderSource(vertexShaderId, 1, &vertexChar, nullptr);
115 glCompileShader(vertexShaderId);
116
117 // Check vertex shader
118 glGetShaderiv(vertexShaderId, GL_COMPILE_STATUS, &glStatus);
119 if (glStatus == GL_FALSE)
120 {
121 errors.push_back("Error in compiling vertex shader:");
122 glGetShaderiv(vertexShaderId, GL_INFO_LOG_LENGTH, &glInfoLogLength);
123 if (glInfoLogLength > 0)
124 {
125 std::vector<char> vsErrorMessage((size_t) glInfoLogLength + 1);
126 glGetShaderInfoLog(vertexShaderId, glInfoLogLength, nullptr, &vsErrorMessage[0]);
127 errors.push_back(&vsErrorMessage[0]);
128 }
129 }
130 else
131 {
132 stagesBuilt++;
133 }
134 }
135
136 // Compile fragment shader, if any
137 GLuint fragmentShaderId = UNDEFINED_OPENGL_RESOURCE_ID;
138 const string& fragmentShaderSource = _stages[Stage::PIXEL];
139 if (!fragmentShaderSource.empty())
140 {
141 fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
142

Callers 2

createProgramMethod · 0.45
bindShaderMethod · 0.45

Calls 4

ExceptionRenderErrorFunction · 0.85
c_strMethod · 0.80
push_backMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected