Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL glAttachShader 1281错误_C++_Opengl_Shader - Fatal编程技术网

C++ OpenGL glAttachShader 1281错误

C++ OpenGL glAttachShader 1281错误,c++,opengl,shader,C++,Opengl,Shader,我正在尝试为一个游戏创建一个OpenGL框架,其中包括一个着色器函数,用于解析顶点着色器和顶点片段 使用OpenGL调用来隔离错误并报告行中的错误中断 #define ASSERT(x) if (!(x)) __debugbreak(); #define GLCall(x) GLClearError();\ x;\ ASSERT(GLLogCall(#x, __FILE__, __LINE__)) 当调试报告为“[OPENGL错误]:”时,我在以下代码中得到一个错误: GLCall(glAt

我正在尝试为一个游戏创建一个OpenGL框架,其中包括一个着色器函数,用于解析顶点着色器和顶点片段

使用OpenGL调用来隔离错误并报告行中的错误中断

#define ASSERT(x)  if (!(x)) __debugbreak();
#define GLCall(x) GLClearError();\
x;\
ASSERT(GLLogCall(#x, __FILE__, __LINE__))
当调试报告为“[OPENGL错误]:”时,我在以下代码中得到一个错误:

GLCall(glAttachShader(program, vs));
此功能中使用的:

static unsigned int CreateShader(const std::string& vertexShader, const 
std::string& fragmentShader)
{

GLCall(unsigned int program = glCreateProgram());
GLCall(unsigned int vs = CompileShader(GL_VERTEX_SHADER, vertexShader));
GLCall(unsigned int fs = CompileShader(GL_FRAGMENT_SHADER, fragmentShader));

GLCall(glAttachShader(program, vs));
GLCall(glAttachShader(program, fs));
GLCall(glLinkProgram(program));
GLCall(glValidateProgram(program));
GLCall(glDeleteShader(vs));
GLCall(glDeleteShader(fs));

return program;

}
在控制台窗口上,它显示:

"Failed to compile shader! vertex"
ERROR: 0:7 'position' : undeclared indentified
ERROR: 0:7 'assign' : cannot convert from 'float' to 'Position 4-component vector of float'"

但是,它仍然会在我的屏幕上生成一个蓝色的四边形。

在构建代码时,请确保着色器已正确更新。打开构建目录并查找正在使用的着色器文件,并确保对源着色器所做的更改反映在构建版本中。着色器的一个常见错误是,它们是在首次创建文件时复制的,然后不进行更新

我和你一样关注同一个系列,我一直使用CMake作为我的构建系统。当我第一次创建着色器文件时,它复制到了着色器文件上,但此后就没有了。通过将下面的行添加到我的CMakeLists.txt,我确保如果着色器文件有任何更改,CMake将更新该文件

configure_file(${PROJECT_SOURCE_DIR}/res/shaders/shader.shader ${PROJECT_BINARY_DIR}/res/shaders/shader.shader COPYONLY)

听起来像是个糟糕的着色器。在一个文件夹中编辑。你的问题是,为什么我在着色器不编译时得到输出?或者为什么我的着色器没有编译?
未声明的已标识的
:-)您应该复制/粘贴。看起来有点。。。非真实。
CompileShader
做什么?顶点着色器不编译。你会因此而删除它吗<如果程序对象或着色器对象无效,则code>glAttachShader会导致
GL\u无效\u值
(1281)错误。由于加载了不同的着色器,或者(更可能)正在运行兼容配置文件OpenGL上下文并返回到固定的函数管道,您仍在使用蓝色四边形(基本上,现代GPU是一种默认着色器,通过状态设置函数设置的大量传统OpenGL参数进行控制)。