OLD | NEW |
(Empty) | |
| 1 // Copyright 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef GLStringQuery_h |
| 6 #define GLStringQuery_h |
| 7 |
| 8 #include "gpu/command_buffer/client/gles2_interface.h" |
| 9 #include "wtf/text/WTFString.h" |
| 10 |
| 11 namespace blink { |
| 12 |
| 13 // Performs a query for a string on GLES2Interface and returns a WTF::String. If |
| 14 // it is unable to query the string, it wil return an empty WTF::String. |
| 15 class GLStringQuery { |
| 16 public: |
| 17 struct ProgramInfoLog { |
| 18 static void LengthFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GL
int* length) |
| 19 { |
| 20 return gl->GetProgramiv(id, GL_INFO_LOG_LENGTH, length); |
| 21 } |
| 22 static void LogFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GLint
length, GLint* returnedLength, LChar* ptr) |
| 23 { |
| 24 return gl->GetProgramInfoLog(id, length, returnedLength, reinterpret
_cast<GLchar*>(ptr)); |
| 25 } |
| 26 }; |
| 27 |
| 28 struct ShaderInfoLog { |
| 29 static void LengthFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GL
int* length) |
| 30 { |
| 31 gl->GetShaderiv(id, GL_INFO_LOG_LENGTH, length); |
| 32 } |
| 33 static void LogFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GLint
length, GLint* returnedLength, LChar* ptr) |
| 34 { |
| 35 gl->GetShaderInfoLog(id, length, returnedLength, reinterpret_cast<GL
char*>(ptr)); |
| 36 } |
| 37 }; |
| 38 |
| 39 struct TranslatedShaderSourceANGLE { |
| 40 static void LengthFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GL
int* length) |
| 41 { |
| 42 gl->GetShaderiv(id, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, length
); |
| 43 } |
| 44 static void LogFunction(gpu::gles2::GLES2Interface* gl, GLuint id, GLint
length, GLint* returnedLength, LChar* ptr) |
| 45 { |
| 46 gl->GetTranslatedShaderSourceANGLE(id, length, returnedLength, reint
erpret_cast<GLchar*>(ptr)); |
| 47 } |
| 48 }; |
| 49 |
| 50 GLStringQuery(gpu::gles2::GLES2Interface* gl) : m_gl(gl) {} |
| 51 |
| 52 template<class Traits> |
| 53 WTF::String Run(GLuint id) { |
| 54 GLint length = 0; |
| 55 Traits::LengthFunction(m_gl, id, &length); |
| 56 if (!length) |
| 57 return WTF::emptyString(); |
| 58 LChar* logPtr; |
| 59 RefPtr<WTF::StringImpl> nameImpl = WTF::StringImpl::createUninitialized(
length, logPtr); |
| 60 GLsizei returnedLength = 0; |
| 61 Traits::LogFunction(m_gl, id, length, &returnedLength, logPtr); |
| 62 // The returnedLength excludes the null terminator. If this check wasn't |
| 63 // true, then we'd need to tell the returned String the real length. |
| 64 DCHECK_EQ(returnedLength + 1, length); |
| 65 return String(nameImpl.release()); |
| 66 } |
| 67 |
| 68 private: |
| 69 gpu::gles2::GLES2Interface* m_gl; |
| 70 }; |
| 71 |
| 72 } // namespace blink |
| 73 #endif // GLStringQuery_h |
OLD | NEW |