根據OpenGL documentation我應該能夠將像素讀取的源設置爲GL_COLOR_ATTACHMENTi
中的任何一個。但是,當我嘗試此操作時,glGetError
給我一個GL_INVALID_ENUM
錯誤。隨後的glReadPixels
只是讀取後臺緩衝區。將readbuffer設置爲FBO顏色附件失敗,導致無效的枚舉錯誤
glGetString(GL_VERSION)
報告的版本是4.2.11627 Core Profile Forward-Compatible Context
。我在Linux上運行並安裝了fglrx ati驅動程序(版本8.96.7-120312a-135598C-ATI)。
我檢查了我的FBO是綁定和完成的。我還驗證了glGetError
未被以前的調用設置。
它已經失敗,在這(我希望這裏的錯誤,而是INVALID_OPERATION
不是INVALID_ENUM
):
#include <iostream>
#include "Window.h" // My own class based on sfml, but I am sure context creation works fine
#include <glload/gll.hpp>
#include <glload/gl_core.hpp>
int main()
{
const unsigned int screenW = 1280, screenH = 720;
Window w(screenW, screenH, 32, false);
if (glload::LoadFunctions() == glload::LS_LOAD_FAILED)
{
std::cerr << "glload failed to load" << std::endl;
return -1;
}
gl::ReadBuffer(gl::GL_COLOR_ATTACHMENT0);
if(gl::GetError() == gl::GL_INVALID_ENUM)
{
std::cerr << "Invalid enum error" << std::endl;
return -1;
}
return 0;
}
難道還有其他原因,這個電話可能引發INVALID_ENUM
或者是更可能的是,OpenGL實現我我正在使用被竊聽?
從技術上講,這是一個「驅動程序錯誤」,但這只是因爲它應該給你'GL_INVALID_OPERATION',而不是ENUM。無論哪種方式都是錯誤的;實施只是給你一個錯誤的。 – 2012-07-15 17:04:44