MCPcopy Create free account
hub / github.com/axmolengine/axmol / compileShader

Method compileShader

core/renderer/backend/opengl/ShaderModuleGL.cpp:44–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42}
43
44void ShaderModuleGL::compileShader(ShaderStage stage, std::string_view source)
45{
46 GLenum shaderType = stage == ShaderStage::VERTEX ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER;
47 const GLchar* sourcePtr = reinterpret_cast<const GLchar*>(source.data());
48 _shader = glCreateShader(shaderType);
49 if (!_shader)
50 return;
51
52 glShaderSource(_shader, 1, &sourcePtr, nullptr);
53 glCompileShader(_shader);
54
55 GLint status = 0;
56 glGetShaderiv(_shader, GL_COMPILE_STATUS, &status);
57 if (!status)
58 {
59 GLint logLength = 0;
60 glGetShaderiv(_shader, GL_INFO_LOG_LENGTH, &logLength);
61
62 if (logLength > 1)
63 {
64 auto errorLog = axstd::make_unique_for_overwrite<char[]>(static_cast<size_t>(logLength));
65 glGetShaderInfoLog(_shader, logLength, nullptr, (GLchar*)errorLog.get());
66 AXLOGE("axmol:ERROR: Failed to compile shader, detail: {}\n{}", errorLog.get(),
67 source.data());
68 }
69 else
70 {
71 AXLOGE("axmol:ERROR: Failed to compile shader without errors.");
72 }
73
74 deleteShader();
75 AXASSERT(false, "Shader compile failed!");
76 }
77}
78
79void ShaderModuleGL::deleteShader()
80{

Callers 1

reloadProgramMethod · 0.80

Calls 2

dataMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected