程序在glBindFramebuffer崩溃(GL_FRAMEBUFFER,fb);在函数gen_texture
中gdb告诉我“程序收到信号SIGILL,非法指令。”
void gen_texture(GLuint &color, int width, int height)
{
GLuint fb;
glGenFramebuffers(1, &fb);
glGenTextures(1, &color);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
...
int main(int argc, char **argv)
{
glutInit (&argc, argv);
glutInitContextVersion(4, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
std::cout << std::hex << glGetError() << "\n" << std::flush;
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize (500, 500);
glutCreateWindow ("");
glutDisplayFunc (display);
glutIdleFunc (display);
std::cout << std::hex << glGetError() << "\n" << std::flush;
glewExperimental=GL_TRUE;
GLenum err=glewInit();
if(err!=GLEW_OK)
{
std::cerr << "glewInit fehlgeschlagen, aborting." << std::endl;
}
gen_texture(texture, 100, 60);
...
答案 0 :(得分:1)
在此代码中
GLenum err=glewInit();
if(err!=GLEW_OK)
{
std::cerr << "glewInit fehlgeschlagen, aborting." << std::endl;
}
因为GLEW返回OK进行初始化,这并不意味着所有扩展都被加载。同时检查glGetError
将不会报告您的GLUT错误(例如,您请求的上下文不受支持。在glGetError
中仅报告OpenGL错误(GLUT不是OpenGL的一部分),此外必须调用一个循环,直到它返回GL_NO_ERROR
。
我建议您添加更详细的错误诊断并报告回来。