openGL, GLFW, 1281错误在glShaderSource上,下一个glShaderSource工作得很好
openGL, GLFW, 1281 error on glShaderSource, the very next glShaderSource works fine somehow
我一直在尝试让着色器工作。他们没有。
std::cout << "a " << glGetError() <<std::endl; //making sure things work
GLuint vertexShader = 0;
GLuint fragmentShader = 1;
glCreateShader(GL_VERTEX_SHADER);
std::cout <<"b " << glGetError() <<std::endl;
glCreateShader(GL_FRAGMENT_SHADER);
std::cout <<"c " << glGetError() <<std::endl;
glShaderSource(vertexShader, GLsizei(1), (const char**)&VertexShaderSource, NULL);//ERROR
std::cout <<"d " << glGetError() <<std::endl;
glShaderSource(fragmentShader, GLsizei(1), (const char**)&FragmentShaderSource, NULL);//is somehow fine
std::cout <<"e " << glGetError() <<std::endl;
glCompileShader(vertexShader);
std::cout <<"f " << glGetError() <<std::endl;
glCompileShader(fragmentShader);
std::cout <<"g " << glGetError() <<std::endl;'
现在输出为:
a 0
b 0
c 0
d 1281
e 0
f 1281
g 0
这意味着第一个glShaderSource
调用不工作,但是,由于某种原因,下一个glShaderSource
工作,同时做我认为完全相同的事情。这是怎么回事?
着色器:
const std::string VertexShaderSource ="#version 330 core"
""
"layout (location = 0) in vec3 position;"
""
"void main()"
"{"
" gl_Position = vec4(position.x, position.y, position.z, 1.0);"
"}";
const std::string FragmentShaderSource ="#version 330 core"
""
"out vec4 color;"
""
"void main()"
"{"
" color = vec4(1.0f, 1.0f, 1.0f, 1.0f);"
"}";
如果以这种方式传递字符串((const char**)&VertexShaderSource)
是错误的,那么为什么第二个调用工作得很好?
您必须将vertexShader
和fragmentShader
设置为glCreateShader
的结果,而不是将其硬编码为0
和1
。
GLuint vertexShader;
GLuint fragmentShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
std::cout <<"b " << glGetError() <<std::endl;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
std::cout <<"c " << glGetError() <<std::endl;
函数glCreateShader
如果调用失败,返回0
。
在你的代码中,你将vertexShader
硬编码为0
, opengl报告glShaderSource(vertexShader, ...
错误,因为你将0
作为id传递给glShaderSource
。
1281
是一个GL_INVALID_VALUE
错误,报告if shader is not a value generated by OpenGL.
glShaderSource: Errors
除此之外,你(const char**)&VertexShaderSource
是错误的,得到一个std::string
存储数据的内存地址,你必须使用.c_str()
:如何传递一个std::字符串到glShaderSource?
您错误地传递了字符串,正确的方式是VertexShaderSource.c_str()
相关文章:
- 使用 Win32 读取文件时,glShaderSource 访问冲突
- C 将字符传递给Glshadersource
- OpenGL GlshaderSource抛出了例外
- 参数对glShaderSource的含义是什么?
- 当超过一个char指针时编译错误(glShaderSource)
- 在Maverick上使用GLFW3的c++代码:glShaderSource没有匹配函数
- 如何将 std::string 传递给 glShaderSource
- OpenGl XUbuntu 14.04 glShaderSource, glCompileShader, glCrea
- openGL, GLFW, 1281错误在glShaderSource上,下一个glShaderSource工作得很好