openGL PBO использует wglcontext, не создает окно - PullRequest
1 голос
/ 18 апреля 2019

Моя цель - получить данные о пикселях из главного окна.ничего никакого рендеринга.как мы видим монитор, такой как снимок экрана.

Я попытался ПРОЗРАЧИТЬ окна, glReadPixel.поэтому у меня есть ПРОЗРАЧНЫЕ окна и контекст.

glfwSetErrorCallback(errorCallback);

if (!glfwInit()) {
    std::cerr << "Error: GLFW " << std::endl;
    exit(EXIT_FAILURE);
}
glfwWindowHint(GLFW_DEPTH_BITS, 16);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);  
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_SAMPLES, 4);


const int Monitor_count = GetMonitors();

GLwindow = glfwCreateWindow(
    nWidth, // width
    nHeight, // height
    "OpenGL_Test", // window title
    NULL, NULL);
if (!GLwindow) {
    glfwTerminate();
    exit(EXIT_FAILURE);
}
glfwSwapInterval(1);    
//glfwShowWindow(GLwindow);


if (glfwGetWindowAttrib(GLwindow, GLFW_TRANSPARENT_FRAMEBUFFER))
{
    // ..
}
glfwSetWindowOpacity(GLwindow, 0.0f);

glfwMakeContextCurrent(GLwindow);
glfwSetKeyCallback(GLwindow, keyCallback);
glewExperimental = GL_TRUE;
GLenum errorCode = glewInit();

Но я хочу получить пиксельные данные из графического процессора без создания окон.

Поэтому я использую wglcreatecontext Получить материнское окно DC, HGLRC.

И когда я устанавливаю буфер связывания, выдает ошибку времени выполнения.

if (!glfwInit()) {
    std::cerr << "Error: GLFW" << std::endl;
    exit(EXIT_FAILURE);
}
HDCC = GetDC(m_hWndCopy);
// HDC TDC = CreateCompatibleDC(HDCC);
HGLRC DC = wglCreateContext(HDCC);

GLuint pbo;
glGenBuffersARB(1, &pbo);     <<Error Here
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);

Как я могу решить проблему?

Любая идея или ссылка?

1 Ответ

2 голосов
/ 18 апреля 2019

Из ваших ответов на вопросы и комментарии я понял, что вы хотите использовать OpenGL, чтобы получить скриншот произвольного окна?Если так, то это не то, для чего предназначен OpenGL. Вы не можете использовать OpenGL для создания скриншотов надежно .

glReadPixels будет надежно работать только для вещей, которые вы рисовали с OpenGL впервое место!

...