Изобразяване на 3D текстура с OpenGL на OSX (прикачен многослоен фреймбуфер)

Имам настроен OpenGL 3.2 CORE контекст на OSX 10.7.5 и се опитвам да изобразя на 3D текстура, като използвам подход на пластово изобразяване. Функцията за геометричен шейдър "gl_layer" се поддържа, но не мога да свържа GL_TEXTURE_3D към моя прикачен буфер за кадри. Връща GL_FRAMEBUFFER_UNSUPPORTED.

Това е версията на картата и драйвера в моя MBP:

AMD Radeon HD 6770M 1024 MB - OpenGL 3.2 CORE (ATI-7.32.12)

Тази функция не е пряко свързана с конкретно разширение AFAIK. Някой знае ли как да разбера дали това не се поддържа от драйвера или хардуера? Много благодаря.

Под кода за реконструкция. Използвам glfw, за да настроя контекста:

// Initialize GLFW
if (!glfwInit())
    throw "Failed to initialize GLFW";

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

// Open a window and create its OpenGL context
if (!glfwOpenWindow(720, 480, 8, 8, 8, 8, 24, 8, GLFW_WINDOW))
    throw "Failed to open GLFW window";

//
// ...
//

GLuint framebuffer, texture;
GLenum status;
glGenFramebuffers(1, &framebuffer);
// Set up the FBO with one texture attachment
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 256, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture, 0);
status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
    throw status;
//
// status is GL_FRAMEBUFFER_UNSUPPORTED here !!!
//

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDeleteTextures(1, &texture);
glDeleteFramebuffers(1, &framebuffer);
exit(1);

person FHoenig    schedule 28.10.2012    source източник


Отговори (1)


Някой знае ли как да разбера дали това не се поддържа от драйвера или хардуера?

То току-що ви каза. Ето какво означава GL_FRAMEBUFFER_UNSUPPORTED: това е драйверът, който упражнява право на вето върху всички прикачени файлове на буфера на кадри, които не харесва по каквато и да е причина.

Няма много какво да направите, когато това се случи, освен да опитате други неща. Може би изобразяване на текстура на 2D масив.

person Nicol Bolas    schedule 28.10.2012
comment
Изглежда, че нито TEXTURE_2D_ARRAY, нито кубична карта работят. само 2D текстура. Това изглежда странно, защото наслоеното изобразяване се поддържа от разширението за геометричен шейдър, което е част от 3.2 CORE. Каква би останала цел за наслоено изобразяване тогава? - person FHoenig; 28.10.2012
comment
@FHoenig: Кубични карти. В крайна сметка на внедряването е позволено да налага вето на всичко, което не харесва по произволни причини. Тези неща работят на Windows и Linux (разбира се, това не е точно полезно за вас), така че не е хардуерен проблем. - person Nicol Bolas; 28.10.2012
comment
@FHoenig: Нищо. Както казах, внедряването не трябва да ви позволява да използвате нещо, което не изглежда като да ви позволява да използвате. За това е GL_FRAMEBUFFER_UNSUPPORTED. Разбира се, не се предполага да се използва по този начин, но спецификацията на OpenGL го позволява. Като се има предвид това, сигурен ли си, че не получаваш поддръжка, а не някой друг преброител? - person Nicol Bolas; 28.10.2012
comment
Получавам неподдържан :-/ OpenCL също няма cl_khr_3d_image_writes на този драйвер. Време е да изпробвате Windows на този Mac. - person FHoenig; 28.10.2012