c++ - openGL PBO 使用 wglcontext,不创建窗口

标签 c++ opengl glfw wgl

我的目标是从主窗口获取像素数据。没有任何渲染。 就像我们看到屏幕截图之类的监视器。

我试过透明窗口,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();

但我想在不创建窗口的情况下从 GPU 获取像素数据。

所以我使用wglcreatecontext获取母窗口DC,HGLRC。

当我设置绑定(bind)缓冲区时,它给出了运行时错误。

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);

我该如何解决问题?

任何想法或链接?

最佳答案

根据我收集到的问题和评论回复,您想使用 OpenGL 抓取任意窗口的屏幕截图?如果是这样,那么这不是 OpenGL 的目的。 您无法使用 OpenGL 可靠地截取屏幕截图。

glReadPixels可靠地用于您首先使用 OpenGL 绘制的内容!

关于c++ - openGL PBO 使用 wglcontext,不创建窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739781/

相关文章:

Java LWJGL OpenGL将3d点转换为2d点

python - PyOpenGL.glDeleteBuffers 在 __del__ 函数中的奇怪行为?

c++ - 将 GLFW 连接到 QOpenGLWidget

c++ - 我想知道像素/片段的原始模板值,零还是一?如果可能得到什么具体的行动修改模板值?

c++ - 错误 : LNK1104: cannot open file

c++ - 尝试用 GTK3 编译空白窗口

c++ - 用于矩阵堆栈的 openGL

c++ - 纹理未应用于二维几何体

c++ - 如何区分电影和图像

c++ - TBB C++ 多线程错误 : No matching function for call