OpenGL glAttachShader 1281错误

问题描述 投票:1回答:1

[我正在尝试为游戏创建一个OpenGL框架,该框架包括一个用于解析顶点着色器和顶点片段的着色器功能。

使用OpenGL调用隔离错误并在线报告错误中断。

#define ASSERT(x)  if (!(x)) __debugbreak();
#define GLCall(x) GLClearError();\
x;\
ASSERT(GLLogCall(#x, __FILE__, __LINE__))

当报告调试时,“ [OPENGL错误]:<1281>”,我在此代码处收到错误:

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'"

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

c++ opengl shader
1个回答
0
投票

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

我正在按照TheCherno on YouTube的相同系列进行操作,并且我一直在使用CMake作为构建系统。当我第一次创建它时,它会复制到着色器文件上,但此后没有。通过将以下行添加到我的CMakeLists.txt中,我确保如果着色器文件有任何更改,CMake将更新该文件。

configure_file(${PROJECT_SOURCE_DIR}/res/shaders/shader.shader ${PROJECT_BINARY_DIR}/res/shaders/shader.shader COPYONLY)
© www.soinside.com 2019 - 2024. All rights reserved.