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