标签: framebuffer

写入帧缓冲区

我正在使用运行在RHEL 6.0操作系统上的内置图形加速器GMA-HD的i5内核.我需要测试图形驱动程序的图形加速功能(我发现在我的电脑中是i915).我使用下面的代码(我从互联网上得到了一些修改)来写入帧缓冲区.

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>

int main()
{
        int fbfd = 0;
        struct fb_var_screeninfo vinfo;
        struct fb_fix_screeninfo finfo;
        long int screensize = 0;
         char *fbp = 0;
        int x = 0, y = 0;
        long int location = 0;
        int count ;

        /* Open the file for reading and writing */
        fbfd = open("/dev/fb0", O_RDWR);
        if (!fbfd) {
                printf("Error: cannot open framebuffer device.\n");
                exit(1);
        }
        printf("The framebuffer device was opened successfully.\n");
     /* Get …
Run Code Online (Sandbox Code Playgroud)

c linux framebuffer

9
推荐指数
1
解决办法
1万
查看次数

GL_DRAW/READ_FRAMEBUFFER与GL_FRAMEBUFFER?

我注意到现在有GL_DRAW/READ_FRAMEBUFFER扩展.目前我只是使用GL_FRAMEBUFFER和glTextureBarrierNV.但是,我没有发现很多关于READ/WRITE扩展的内容,因此有一些问题.

他们介绍了什么OpenGL版本?使用简单的GL_FRAMEBUFFER进行读写操作有什么好处?我在哪里可以找到更多关于此的信息?

c++ opengl framebuffer

9
推荐指数
1
解决办法
5704
查看次数

OpenGL,如何使用framebuffer中的depthbuffer作为通常的深度缓冲区

我有帧缓冲区,深度组件和4个颜色附件与4纹理

我在其中绘制了一些东西,然后取消绑定缓冲区,使用4个纹理进行片段着色器(延迟光照).后来我想在屏幕上绘制更多东西,使用我的帧缓冲区中的深度缓冲区,是否可能?

我尝试再次绑定framebuffer并指定glDrawBuffer(GL_FRONT),但它不起作用.

opengl framebuffer depth-buffer

9
推荐指数
2
解决办法
6854
查看次数

如何在Android上使用framebuffer进行绘制?

我想编写一个Android应用程序,它使用framebuffer在屏幕上显示内容.这将仅在特定的root设备上运行,因此权限等不是问题.相同的应用程序(无论如何简单的测试版本)已经在PC/Linux上正常运行.

问题:

  1. 如何避免Android操作系统访问帧缓冲区?我希望,在我的应用程序运行时,操作系统永远不会触摸帧缓冲区,没有写入和没有ioctl.我需要做什么才能独占使用framebuffer,然后(当我的应用程序退出时)将其返回给操作系统?

  2. Android framebuffer和Linux framebuffer之间有什么区别需要注意吗?

PS我想将我的应用程序作为常规Android应用程序(带有一些本机代码)启动,它除了用于接管整个屏幕的帧缓冲区绘制外,没有可见的UI.能够从操作系统获取事件会很高兴.

另见:http: //www.kandroid.org/online-pdk/guide/display_drivers.html

c linux graphics android framebuffer

9
推荐指数
1
解决办法
5239
查看次数

如何恢复GL_RENDERBUFFER?

我正在努力存储和恢复基于OpenGL ES的应用程序的状态.

我有一个函数来保存GL_RENDERBUFFER以使用以下代码转储数据:

glBindFramebuffer(GL_FRAMEBUFFER, fboTextureBufferData.framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, fboTextureBufferData.colorbuffer);

GLint x = 0, y = 0, width2 = backingWidth, height2 = backingHeight;
NSInteger dataLength = width * height * 4;
GLubyte *data = (GLubyte*)malloc(dataLength * sizeof(GLubyte));

// Read pixel data from the framebuffer
glPixelStorei(GL_PACK_ALIGNMENT, 4);
glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)

我没有看到glWritePixels函数.使用上面填充的GLubyte数据重新填充GL_RENDERBUFFER的最佳方法是什么?一个例子将不胜感激.

编辑3:

以下是我尝试配置纹理渲染缓冲区以及用于绘制它的函数的方法.如代码中所述,如果我为glFramebufferTexture2D参数指定GL_COLOR_ATTACHMENT1,则存储的像素数据将被恢复,但我无法获取任何更新.但是如果我使用GL_COLOR_ATTACHMENT0,我会得到绘图更新但没有恢复像素数据.

我尝试了各种组合(例如,对于glFramebufferRenderbuffer参数也使用了GL_COLOR_ATTACHMENT1)但是在尝试渲染时我得到了无效的帧缓冲区错误.我似乎非常接近,但无法弄清楚如何让它们恢复和渲染一起工作.

- (bool)configureRenderTextureBuffer {

    [EAGLContext setCurrentContext:context];

    glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];

    glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];

    glGenFramebuffers(1, &fboTextureBufferData.framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, fboTextureBufferData.framebuffer);

    glGenRenderbuffers(1, &fboTextureBufferData.colorbuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, fboTextureBufferData.colorbuffer);

    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, backingWidth, …
Run Code Online (Sandbox Code Playgroud)

opengl-es framebuffer ios opengl-es-3.0

9
推荐指数
1
解决办法
605
查看次数

如何为iPhone创建一个32RGBA格式的CVPixelBuffer?

在尝试创建32位RGBA CVPixelBuffer时,我经常会遇到错误.

最值得注意的是错误-6680,这意味着:"缓冲区不支持指定的像素格式."

这是代码片段:(宽度和高度指定为256*256)

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
//                         [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
//                         [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
//                         [NSNumber numberWithBool:YES], kCVPixelBufferOpenGLCompatibilityKey,
                         nil];
CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, WIDTH,
                                      HEIGHT, kCVPixelFormatType_32RGBA, (CFDictionaryRef) options, 
                                      &pxbuffer);
NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);
Run Code Online (Sandbox Code Playgroud)

任何人都可以暗示我做错了什么吗?

iphone rendering opengl-es framebuffer

8
推荐指数
1
解决办法
8211
查看次数

glUniformBlockBinding和glBindBufferBase之间的顺序是否重要?

使用UBO时,我们将统一块绑定到绑定点.然后我们还将UBO绑定到相同的绑定点:类似于:

glUseProgram(ProgramName);
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint);
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId);
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

  1. 我应该先指定glUniformBlockBinding还是glBindBufferBase,否则顺序无关紧要?
  2. 如果我的理解是正确的,那么只有在我们用数据更新UBO之后才能调用glBindBufferBase.如果这是正确的话,这就回答了我的第一个问题.

opengl framebuffer glsl

8
推荐指数
1
解决办法
2298
查看次数

如果“纯 XCB”OpenGL 是不可能的,那么 xcb/glx.h 中的 XCB/GLX API 有什么用?

XCB 官方文档告诉我们,将 OpenGL 与 XCB 一起使用是不可能的:还必须使用 Xlib。

Bart Massey(XCB 的创建者)的这篇文章并不表明这应该是不可能的。但我确定我错过了一些东西。

我花了几个小时浏览xcb/glx.h这里组织得很好。在我看来,它就像一个成熟的 API。但我无法让它工作。

问题

  1. XCB/GLX API 没用吗?的目的是xcb/glx.h什么?
  2. 如何使用 API?

(注意。这是了解 XCB 工作原理的持续努力的一部分。)

相关的SO 线程


次要的、冗长的东西

如果有人愿意尝试一下,这里是 XCB 邮件列表中原始帖子的来源,将其精简并放入单个文件中。

你会注意到xcb_glx_make_context_current返回错误169(不知道是什么意思),但只有在 xcb_glx_create_window需要0NULL它的最后两个参数。这些参数涉及一组属性,似乎是由函数返回的xcb_glx_create_window_attribs,但我不知道如何使用它...

之前的长辅助函数int main()仅意味着两个返回两个整数,xcb_glx_fbconfig_t fbconfig xcb_visualid_t glx_visual,对应于第一个“匹配”帧缓冲区配置。在我的平台上,这些是0xa70x24。它们正是 Xlib/GLX 例程(实际有效)返回的内容,所以我知道我选择的帧缓冲区配置很好。

所以,问题似乎发生在xcb_glx_create_windowxcb_glx_make_context_current......

// gcc main2.c -o main …
Run Code Online (Sandbox Code Playgroud)

linux x11 framebuffer glx xcb

8
推荐指数
1
解决办法
2282
查看次数

如何为 Mac 编写虚拟帧缓冲驱动程序?

所以,我想为mac编写一个虚拟监视器驱动程序。这类似于屏幕回收器应用程序所做的事情。我已经阅读了很多关于驱动程序编程和 kext 的一般资源,我已经完成了苹果的基本 iokit 驱动程序教程,但是从哪里开始呢?

本教程提供了对驱动程序的非常基本的了解,但对于我的用例来说,这绝对是不够的。我知道我们必须实现 IOframebuffer 标头,但我不知道其余的?此外 IOframebuffer 标头有一些非常复杂的方法,我不太清楚如何实现这些方法。有人可以向我提供一些关于需要做什么的有用指示吗?

我已经看过这个问题

为 OS X 创建虚拟显示器驱动程序的指针

这些回购,

https://github.com/tSoniq/displayx

https://github.com/mkernel/EWProxyFramebuffer

但问题是,这两个项目在 MAC OS 10.12 中都不起作用,因为它们很长时间没有更新。

我正在寻找一些我需要遵循的指南来编写这样的驱动程序,而苹果文档并没有真正的帮助。

c++ macos kernel framebuffer kernel-extension

8
推荐指数
0
解决办法
735
查看次数

Tensorflow 模型能否在不读回 CPU 的情况下在 openGL 帧缓冲区/纹理中运行对象检测

背景:

  1. 我有一个管道,它使用一系列OpenGL着色器来处理网络摄像头源素材并定位一个功能(它总是相同的功能,而且我一直在寻找一个功能)。
  2. 唯一读回给 CPU 的是边界框的 4 个坐标。

我有兴趣训练一个对象检测神经网络,看看我是否能在从镜头中提取我的特征时获得更好的性能/准确性。


问题:

是否可以在 openGL 环境中运行经过训练的模型(使用帧缓冲区/纹理作为输入)而无需从 cpu/gpu 来回读取纹理?

例子:

  1. 运行我的预处理 OpenGL 着色器程序
  2. 使用帧缓冲区作为输入的特征检测模型(用 tensorflow 训练)
  3. 提取边界框坐标

opengl framebuffer tensorflow

8
推荐指数
0
解决办法
364
查看次数