| 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 |
nothing calls this directly
no test coverage detected