@@ -56,6 +56,14 @@ namespace MobileGL {
5656 return programObject;
5757 }
5858
59+ void CopyStr (GLsizei bufSize, GLsizei *length, GLchar *dst, const char * src, GLsizei srcLength) {
60+ auto sz = std::min (bufSize - 1 , srcLength);
61+ if (length)
62+ *length = sz;
63+ memcpy (dst, src, sz);
64+ dst[sz] = ' \0 ' ;
65+ }
66+
5967 void AttachShader_State (GLuint program, GLuint shader) {
6068 auto programObject = TryToGetProgramObject (program);
6169 if (!programObject)
@@ -168,15 +176,25 @@ namespace MobileGL {
168176 }
169177
170178 void GetProgramInfoLog_State (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) {
171- THROW_UNIMPL_EXCEPTION ;
179+ auto programObject = TryToGetProgramObject (program);
180+ if (!programObject)
181+ return ;
182+
183+ const auto & log = programObject->GetInfoLog ();
184+ CopyStr (bufSize, length, infoLog, log.c_str (), log.length ());
172185 }
173186
174187 void GetShaderiv_State (GLuint shader, GLenum pname, GLint* params) {
175188 THROW_UNIMPL_EXCEPTION ;
176189 }
177190
178191 void GetShaderInfoLog_State (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) {
179- THROW_UNIMPL_EXCEPTION ;
192+ auto shaderObject = TryToGetShaderObject (shader);
193+ if (!shaderObject)
194+ return ;
195+
196+ const auto & log = shaderObject->GetInfoLog ();
197+ CopyStr (bufSize, length, infoLog, log.c_str (), log.length ());
180198 }
181199
182200 void GetShaderSource_State (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) {
@@ -192,13 +210,11 @@ namespace MobileGL {
192210 return ;
193211
194212 auto & src = shaderObject->GetShaderSource ();
195- auto sz = std::min (bufSize - 1 , (GLsizei)src.length ());
196- if (length)
197- *length = sz;
198- memcpy (source, src.c_str (), sz);
199- source[sz] = ' \0 ' ;
213+ CopyStr (bufSize, length, source, src.c_str (), src.length ());
200214 }
201215
216+
217+
202218 GLint GetUniformLocation_State (GLuint program, const GLchar* name) {
203219 THROW_UNIMPL_EXCEPTION ;
204220 }
0 commit comments