MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / set_shader

Method set_shader

src/Engine/OpenGL.cpp:214–248  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

212 }
213
214 void OpenGL::set_shader(const char *source_yaml_filename) {
215 if(!shader_support) return;
216
217 if(fragmentshader) {
218 glDetachShader(glprogram, fragmentshader);
219 glDeleteShader(fragmentshader);
220 fragmentshader = 0;
221 }
222
223 if(vertexshader) {
224 glDetachShader(glprogram, vertexshader);
225 glDeleteShader(vertexshader);
226 vertexshader = 0;
227 }
228
229 if(source_yaml_filename && strlen(source_yaml_filename)) {
230 YAML::Node document = YAML::LoadFile(source_yaml_filename);
231
232 bool is_glsl;
233 std::string language = document["language"].as<std::string>();
234 is_glsl = (language == "GLSL");
235
236
237 linear = document["linear"].as<bool>(false); // some shaders want texture linear interpolation and some don't
238 std::string fragment_source = document["fragment"].as<std::string>("");
239 std::string vertex_source = document["vertex"].as<std::string>("");
240
241 if(is_glsl) {
242 if(fragment_source != "") set_fragment_shader(fragment_source.c_str());
243 if(vertex_source != "") set_vertex_shader(vertex_source.c_str());
244 }
245 }
246
247 glLinkProgram(glprogram);
248 }
249
250 void OpenGL::set_fragment_shader(const char *source) {
251 fragmentshader = glCreateShader(GL_FRAGMENT_SHADER);

Callers 1

resetDisplayMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected