MCPcopy Create free account
hub / github.com/defold/defold / OpenGLReloadProgram

Function OpenGLReloadProgram

engine/graphics/src/opengl/graphics_opengl.cpp:3903–3962  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3901 }
3902
3903 static bool OpenGLReloadProgram(HContext _context, HProgram _program, ShaderDesc* ddf)
3904 {
3905 ShaderDesc::Shader* ddf_vp = 0x0;
3906 ShaderDesc::Shader* ddf_fp = 0x0;
3907 ShaderDesc::Shader* ddf_cp = 0x0;
3908
3909 if (!GetShaderProgram(_context, ddf, &ddf_vp, &ddf_fp, &ddf_cp))
3910 {
3911 return 0;
3912 }
3913
3914 OpenGLContext* context = (OpenGLContext*) _context;
3915 OpenGLProgram* program = (OpenGLProgram*) _program;
3916
3917 if (ddf_cp)
3918 {
3919 if (!ReloadShader(context, program->m_ComputeShader, ddf_cp, DMGRAPHICS_TYPE_COMPUTE_SHADER))
3920 {
3921 return false;
3922 }
3923
3924 GLuint id = GetGLHandle(context, program->m_ComputeShader->m_Id);
3925
3926 if (!TryLinkProgram(&id, 1))
3927 {
3928 return false;
3929 }
3930
3931 glLinkProgram(GetGLHandle(context, program->m_Id));
3932 CHECK_GL_ERROR;
3933 }
3934 else
3935 {
3936 if (!ReloadShader(context, program->m_VertexShader, ddf_vp, GL_VERTEX_SHADER))
3937 {
3938 return false;
3939 }
3940 if (!ReloadShader(context, program->m_FragmentShader, ddf_fp, GL_FRAGMENT_SHADER))
3941 {
3942 return false;
3943 }
3944
3945 GLuint ids[] = {
3946 GetGLHandle(context, program->m_VertexShader->m_Id),
3947 GetGLHandle(context, program->m_FragmentShader->m_Id)
3948 };
3949
3950 if (!TryLinkProgram(ids, 2))
3951 {
3952 return false;
3953 }
3954
3955 glLinkProgram(GetGLHandle(context, program->m_Id));
3956 CHECK_GL_ERROR;
3957
3958 BuildAttributes(program);
3959 }
3960

Callers

nothing calls this directly

Calls 5

GetShaderProgramFunction · 0.85
GetGLHandleFunction · 0.85
TryLinkProgramFunction · 0.85
BuildAttributesFunction · 0.85
ReloadShaderFunction · 0.70

Tested by

no test coverage detected