Недавно я задал этот вопрос:
Как выполнять асинхронные внеэкранные запросы?
Что я слышал, но пока не смог подтвердить, так это то, что рендеринг в окно обходится дороже, чем рендеринг в фреймбуфер. Прежде всего, кто-нибудь может прокомментировать это? Могу ли я рисовать несколько сцен в фреймбуферах быстрее, чем в окне? Существуют ли другие варианты, например, pbuffers или PBO?
Я начал играть с фреймбуферами, но не смог заставить запрос работать. Вот некоторый псевдокод для того, что я настроил до сих пор:
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
window = glfwCreateWindow(1, 1, "OpenGL", NULL, NULL);
glfwMakeContextCurrent(window);
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glGenRenderbuffers(1, &rbo);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, size, size);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo);
glEnable(GL_DEPTH_TEST);
glGenQueries(numberOfQueries, queries);
for (scene in scenesToRender)
{
glClear(GL_DEPTH_BUFFER_BIT);
glDepthFunc(GL_LESS);
drawShadingObjects(scene);
glBeginQuery(GL_SAMPLES_PASSED, queries[index]);
glDepthFunc(GL_LEQUAL);
drawShadedObject(scene);
glEndQuery(GL_SAMPLES_PASSED);
}
collectQueryResults();
deleteBuffers();
Пока все работает, но все запросы возвращают "0". Есть ли что-то в запросе при рисовании в буфер кадра, что отличается от запроса при рисовании в оконный буфер?
И снова мои два вопроса:
- Могу ли я рисовать несколько сцен в фреймбуферах быстрее, чем в окне? Существуют ли другие варианты, например, pbuffers или PBO?
- Есть ли что-то в запросе при рисовании в буфер кадра, что отличается от запроса при рисовании в оконный буфер?
glGenQueries()
иglBeginQuery()
не совпадают. - person genpfault   schedule 28.01.2014