OSDN Git Service

Refactor GL extension getting part in checksum setup.
authorLingfeng Yang <lfy@google.com>
Mon, 23 May 2016 19:16:04 +0000 (12:16 -0700)
committerLingfeng Yang <lfy@google.com>
Tue, 24 May 2016 20:32:51 +0000 (13:32 -0700)
Change-Id: Ieb26ce5682a87821935a5b639e5242942d13ac21

system/OpenglSystemCommon/HostConnection.cpp
system/OpenglSystemCommon/HostConnection.h

index 0a30d27..54b28e7 100644 (file)
@@ -157,21 +157,26 @@ gl2_client_context_t *HostConnection::s_getGL2Context()
     return NULL;
 }
 
-void HostConnection::setChecksumHelper(renderControl_encoder_context_t *rcEnc) {
+std::string HostConnection::queryGLExtensions(renderControl_encoder_context_t *rcEnc) {
     std::unique_ptr<char[]> glExtensions;
     int extensionSize = rcEnc->rcGetGLString(rcEnc, GL_EXTENSIONS, NULL, 0);
     if (extensionSize < 0) {
-        glExtensions = std::unique_ptr<char[]>(new char[-extensionSize]);
+        glExtensions.reset(new char[-extensionSize]);
         extensionSize = rcEnc->rcGetGLString(rcEnc, GL_EXTENSIONS, glExtensions.get(), -extensionSize);
         if (extensionSize <= 0) {
             glExtensions.reset();
+            return std::string();
         }
     }
+    return std::string(glExtensions.get(), extensionSize);
+}
+
+void HostConnection::setChecksumHelper(renderControl_encoder_context_t *rcEnc) {
+    std::string glExtensions = queryGLExtensions(rcEnc);
     // check the host supported version
     uint32_t checksumVersion = 0;
     const char* checksumPrefix = ChecksumCalculator::getMaxVersionStrPrefix();
-    const char* glProtocolStr = glExtensions.get() ?
-            strstr(glExtensions.get(), checksumPrefix) : NULL;
+    const char* glProtocolStr = strstr(glExtensions.c_str(), checksumPrefix);
     if (glProtocolStr) {
         uint32_t maxVersion = ChecksumCalculator::getMaxVersion();
         sscanf(glProtocolStr+strlen(checksumPrefix), "%d", &checksumVersion);
index a52fbfa..3896288 100644 (file)
@@ -20,6 +20,8 @@
 #include "renderControl_enc.h"
 #include "ChecksumCalculator.h"
 
+#include <string>
+
 class GLEncoder;
 class gl_client_context_t;
 class GL2Encoder;
@@ -46,6 +48,8 @@ private:
     HostConnection();
     static gl_client_context_t  *s_getGLContext();
     static gl2_client_context_t *s_getGL2Context();
+
+    std::string queryGLExtensions(renderControl_encoder_context_t *rcEnc);
     // setProtocol initilizes GL communication protocol for checksums
     // should be called when m_rcEnc is created
     void setChecksumHelper(renderControl_encoder_context_t *rcEnc);