glGetShaderSource retruns 'true' with length of 3

81 views Asked by At

I'm trying to write a sample workflow using es2 in a C++ unit test. when doing

glCompileShader(vertexShader);

I'm getting 0 for GL_COMPILE_STATUS flag

GLint vertexShaderRes;
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vertexShaderRes);
EXPECT_NE(GL_FALSE, vResult) << "glGetShaderiv result is 0";

Then I tried to find if I made any error in shader source part

GLint vertSrcLen;
glGetShaderiv(vertexShader, GL_SHADER_SOURCE_LENGTH, &vertSrcLen);
EXPECT_NE(0, vertSrcLen) << "shader source len error";
GLchar vertCode[vertSrcLen];
glGetShaderSource(vertexShader, vertSrcLen, NULL, vertCode);
EXPECT_TRUE(false) << "==== vertex shader source ===="<< std::endl
                   << "len: "<< vertSrcLen             << std::endl
                   << vertCode                        << std::endl
                   << "==============================";

The output above is

Value of: false
  Actual: false
Expected: true
==== vertex shader source ====
len: 3
true
==============================

My shader source are defined as below:

std::string vertexSource = "/path/to/vertex.glsl"
std::ifstream vertexStream(vertexSource, std::ios::in);
ASSERT_EQ(true, vertexStream.is_open()) << "unable to open vertex shader file";
std::stringstream vertStr;
vertStr << vertexStream.rdbuf();
auto vertStrPtr = (const GLchar*)(vertStr.str()).c_str();
glShaderSource(vertexShader, 1, &vertStrPtr, NULL);

And the original of this all is I'm getting GL_INVALID_OPERATION when calling glGetAttribLocation(); and here seems something wrong with my shader part. Any idea what's wrong with my code? Any help would be appreciated

0

There are 0 answers