我正在使用运行在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) 我注意到现在有GL_DRAW/READ_FRAMEBUFFER扩展.目前我只是使用GL_FRAMEBUFFER和glTextureBarrierNV.但是,我没有发现很多关于READ/WRITE扩展的内容,因此有一些问题.
他们介绍了什么OpenGL版本?使用简单的GL_FRAMEBUFFER进行读写操作有什么好处?我在哪里可以找到更多关于此的信息?
我有帧缓冲区,深度组件和4个颜色附件与4纹理
我在其中绘制了一些东西,然后取消绑定缓冲区,使用4个纹理进行片段着色器(延迟光照).后来我想在屏幕上绘制更多东西,使用我的帧缓冲区中的深度缓冲区,是否可能?
我尝试再次绑定framebuffer并指定glDrawBuffer(GL_FRONT),但它不起作用.
我想编写一个Android应用程序,它使用framebuffer在屏幕上显示内容.这将仅在特定的root设备上运行,因此权限等不是问题.相同的应用程序(无论如何简单的测试版本)已经在PC/Linux上正常运行.
问题:
如何避免Android操作系统访问帧缓冲区?我希望,在我的应用程序运行时,操作系统永远不会触摸帧缓冲区,没有写入和没有ioctl.我需要做什么才能独占使用framebuffer,然后(当我的应用程序退出时)将其返回给操作系统?
Android framebuffer和Linux framebuffer之间有什么区别需要注意吗?
PS我想将我的应用程序作为常规Android应用程序(带有一些本机代码)启动,它除了用于接管整个屏幕的帧缓冲区绘制外,没有可见的UI.能够从操作系统获取事件会很高兴.
另见:http: //www.kandroid.org/online-pdk/guide/display_drivers.html
我正在努力存储和恢复基于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) 在尝试创建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)
任何人都可以暗示我做错了什么吗?
使用UBO时,我们将统一块绑定到绑定点.然后我们还将UBO绑定到相同的绑定点:类似于:
glUseProgram(ProgramName);
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint);
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId);
Run Code Online (Sandbox Code Playgroud)
我有2个问题:
XCB 官方文档告诉我们,将 OpenGL 与 XCB 一起使用是不可能的:还必须使用 Xlib。
Bart Massey(XCB 的创建者)的这篇文章并不表明这应该是不可能的。但我确定我错过了一些东西。
我花了几个小时浏览xcb/glx.h,这里组织得很好。在我看来,它就像一个成熟的 API。但我无法让它工作。
xcb/glx.h什么?(注意。这是了解 XCB 工作原理的持续努力的一部分。)
相关的SO 线程。
如果有人愿意尝试一下,这里是 XCB 邮件列表中原始帖子的来源,将其精简并放入单个文件中。
你会注意到xcb_glx_make_context_current返回错误169(不知道是什么意思),但只有在 xcb_glx_create_window需要0和NULL它的最后两个参数。这些参数涉及一组属性,似乎是由函数返回的xcb_glx_create_window_attribs,但我不知道如何使用它...
之前的长辅助函数int main()仅意味着两个返回两个整数,xcb_glx_fbconfig_t fbconfig xcb_visualid_t glx_visual,对应于第一个“匹配”帧缓冲区配置。在我的平台上,这些是0xa7和0x24。它们正是 Xlib/GLX 例程(实际有效)返回的内容,所以我知道我选择的帧缓冲区配置很好。
所以,问题似乎发生在xcb_glx_create_window和xcb_glx_make_context_current......
// gcc main2.c -o main …Run Code Online (Sandbox Code Playgroud) 所以,我想为mac编写一个虚拟监视器驱动程序。这类似于屏幕回收器应用程序所做的事情。我已经阅读了很多关于驱动程序编程和 kext 的一般资源,我已经完成了苹果的基本 iokit 驱动程序教程,但是从哪里开始呢?
本教程提供了对驱动程序的非常基本的了解,但对于我的用例来说,这绝对是不够的。我知道我们必须实现 IOframebuffer 标头,但我不知道其余的?此外 IOframebuffer 标头有一些非常复杂的方法,我不太清楚如何实现这些方法。有人可以向我提供一些关于需要做什么的有用指示吗?
我已经看过这个问题
这些回购,
https://github.com/tSoniq/displayx
https://github.com/mkernel/EWProxyFramebuffer
但问题是,这两个项目在 MAC OS 10.12 中都不起作用,因为它们很长时间没有更新。
我正在寻找一些我需要遵循的指南来编写这样的驱动程序,而苹果文档并没有真正的帮助。
我有兴趣训练一个对象检测神经网络,看看我是否能在从镜头中提取我的特征时获得更好的性能/准确性。
是否可以在 openGL 环境中运行经过训练的模型(使用帧缓冲区/纹理作为输入)而无需从 cpu/gpu 来回读取纹理?