Commit a68b6112 by Nicolas Capens

Use an STL string for the shader info log.

Bug 19331817 Change-Id: I9ea2f823fafa54e598e79181aa39c3626d9dc4e8 Reviewed-on: https://swiftshader-review.googlesource.com/2291Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 20b06c3c
...@@ -27,7 +27,6 @@ bool Shader::compilerInitialized = false; ...@@ -27,7 +27,6 @@ bool Shader::compilerInitialized = false;
Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mResourceManager(manager) Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mResourceManager(manager)
{ {
mSource = NULL; mSource = NULL;
mInfoLog = NULL;
clear(); clear();
...@@ -38,7 +37,6 @@ Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mReso ...@@ -38,7 +37,6 @@ Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mReso
Shader::~Shader() Shader::~Shader()
{ {
delete[] mSource; delete[] mSource;
delete[] mInfoLog;
} }
GLuint Shader::getName() const GLuint Shader::getName() const
...@@ -88,29 +86,29 @@ void Shader::setSource(GLsizei count, const char *const *string, const GLint *le ...@@ -88,29 +86,29 @@ void Shader::setSource(GLsizei count, const char *const *string, const GLint *le
int Shader::getInfoLogLength() const int Shader::getInfoLogLength() const
{ {
if(!mInfoLog) if(infoLog.empty())
{ {
return 0; return 0;
} }
else else
{ {
return strlen(mInfoLog) + 1; return infoLog.size() + 1;
} }
} }
void Shader::getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog) void Shader::getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLogOut)
{ {
int index = 0; int index = 0;
if(bufSize > 0) if(bufSize > 0)
{ {
if(mInfoLog) if(!infoLog.empty())
{ {
index = std::min(bufSize - 1, (int)strlen(mInfoLog)); index = std::min(bufSize - 1, (GLsizei)infoLog.size());
memcpy(infoLog, mInfoLog, index); memcpy(infoLogOut, infoLog.c_str(), index);
} }
infoLog[index] = '\0'; infoLogOut[index] = '\0';
} }
if(length) if(length)
...@@ -181,8 +179,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType) ...@@ -181,8 +179,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType)
void Shader::clear() void Shader::clear()
{ {
delete[] mInfoLog; infoLog.clear();
mInfoLog = NULL;
varyings.clear(); varyings.clear();
activeUniforms.clear(); activeUniforms.clear();
...@@ -221,10 +218,8 @@ void Shader::compile() ...@@ -221,10 +218,8 @@ void Shader::compile()
{ {
deleteShader(); deleteShader();
int infoLogLen = compiler->getInfoSink().info.size() + 1; infoLog = compiler->getInfoSink().info.c_str();
mInfoLog = new char[infoLogLen]; TRACE("\n%s", infoLog.c_str());
strcpy(mInfoLog, compiler->getInfoSink().info.c_str());
TRACE("\n%s", mInfoLog);
} }
delete compiler; delete compiler;
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#define GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES
#include <GL/glext.h> #include <GL/glext.h>
#include <string>
#include <list> #include <list>
#include <vector> #include <vector>
...@@ -77,7 +78,7 @@ protected: ...@@ -77,7 +78,7 @@ protected:
static bool compareVarying(const glsl::Varying &x, const glsl::Varying &y); static bool compareVarying(const glsl::Varying &x, const glsl::Varying &y);
char *mSource; char *mSource;
char *mInfoLog; std::string infoLog;
private: private:
virtual void createShader() = 0; virtual void createShader() = 0;
......
...@@ -27,7 +27,6 @@ bool Shader::compilerInitialized = false; ...@@ -27,7 +27,6 @@ bool Shader::compilerInitialized = false;
Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mResourceManager(manager) Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mResourceManager(manager)
{ {
mSource = NULL; mSource = NULL;
mInfoLog = NULL;
clear(); clear();
...@@ -38,7 +37,6 @@ Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mReso ...@@ -38,7 +37,6 @@ Shader::Shader(ResourceManager *manager, GLuint handle) : mHandle(handle), mReso
Shader::~Shader() Shader::~Shader()
{ {
delete[] mSource; delete[] mSource;
delete[] mInfoLog;
} }
GLuint Shader::getName() const GLuint Shader::getName() const
...@@ -88,29 +86,29 @@ void Shader::setSource(GLsizei count, const char *const *string, const GLint *le ...@@ -88,29 +86,29 @@ void Shader::setSource(GLsizei count, const char *const *string, const GLint *le
int Shader::getInfoLogLength() const int Shader::getInfoLogLength() const
{ {
if(!mInfoLog) if(infoLog.empty())
{ {
return 0; return 0;
} }
else else
{ {
return strlen(mInfoLog) + 1; return infoLog.size() + 1;
} }
} }
void Shader::getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog) void Shader::getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLogOut)
{ {
int index = 0; int index = 0;
if(bufSize > 0) if(bufSize > 0)
{ {
if(mInfoLog) if(!infoLog.empty())
{ {
index = std::min(bufSize - 1, (int)strlen(mInfoLog)); index = std::min(bufSize - 1, (GLsizei)infoLog.size());
memcpy(infoLog, mInfoLog, index); memcpy(infoLogOut, infoLog.c_str(), index);
} }
infoLog[index] = '\0'; infoLogOut[index] = '\0';
} }
if(length) if(length)
...@@ -181,8 +179,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType) ...@@ -181,8 +179,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType)
void Shader::clear() void Shader::clear()
{ {
delete[] mInfoLog; infoLog.clear();
mInfoLog = NULL;
varyings.clear(); varyings.clear();
activeUniforms.clear(); activeUniforms.clear();
...@@ -221,10 +218,8 @@ void Shader::compile() ...@@ -221,10 +218,8 @@ void Shader::compile()
{ {
deleteShader(); deleteShader();
int infoLogLen = compiler->getInfoSink().info.size() + 1; infoLog = compiler->getInfoSink().info.c_str();
mInfoLog = new char[infoLogLen]; TRACE("\n%s", infoLog.c_str());
strcpy(mInfoLog, compiler->getInfoSink().info.c_str());
TRACE("\n%s", mInfoLog);
} }
delete compiler; delete compiler;
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#define GL_APICALL #define GL_APICALL
#include <GLES2/gl2.h> #include <GLES2/gl2.h>
#include <string>
#include <list> #include <list>
#include <vector> #include <vector>
...@@ -74,7 +75,7 @@ protected: ...@@ -74,7 +75,7 @@ protected:
static bool compareVarying(const glsl::Varying &x, const glsl::Varying &y); static bool compareVarying(const glsl::Varying &x, const glsl::Varying &y);
char *mSource; char *mSource;
char *mInfoLog; std::string infoLog;
private: private:
virtual void createShader() = 0; virtual void createShader() = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment