标签: framebuffer

如何为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
查看次数

应用自动调整大小时,iOS8 MKMapView Framebuffer在旋转期间出错

#import "AppDelegate.h"
#import <MapKit/MapKit.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:   (NSDictionary *)launchOptions
{
    [self setWindow:[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];
    [self.window makeKeyAndVisible];

    UIViewController *vc = [[UIViewController alloc] init];
    self.window.rootViewController = vc;
    vc.view.autoresizingMask = UIViewAutoresizingFlexibleWidth |    UIViewAutoresizingFlexibleHeight;

    MKMapView *map = [[MKMapView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    map.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [vc.view addSubview:map];

    return YES;
}

@end
Run Code Online (Sandbox Code Playgroud)

要查看问题,请运行上面的代码并旋转设备.您将体验旋转动画的显着延迟.

如果您连接iOS8 iPad并运行模拟器,您将收到以下警告:

崩溃!0x15dd7980
错误/SourceCache/VectorKit/VectorKit-992.16/GeoGL/GeoGL/GLCoreContext.cpp 1237:帧缓冲不完整,附件不完整

有谁知道如何解决这个问题?

framebuffer autoresize mapkit ios8

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

如果“纯 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
查看次数

OpenGL ES 2.0 FBO创建错误,未知错误

我一直在努力解决这个问题,而且这个代码对我来说不明原因崩溃了.我正在创建一个FBO,绑定一个纹理,然后第一个glDrawArrays()在我的iPhone模拟器上崩溃了"EXC_BAD_ACCESS".

这是我用来创建FBO的代码(并绑定纹理和......)

glGenFramebuffers(1, &lastFrameBuffer);
glGenRenderbuffers(1, &lastFrameDepthBuffer);
glGenTextures(1, &lastFrameTexture);

glBindTexture(GL_TEXTURE1, lastFrameTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 768, 1029, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//Bind/alloc depthbuf
glBindRenderbuffer(GL_RENDERBUFFER, lastFrameDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1029);

glBindFramebuffer(GL_FRAMEBUFFER, lastFrameBuffer);

//binding the texture to the FBO :D
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, lastFrameTexture, 0);

// attach the renderbuffer to depth attachment point
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, lastFrameDepthBuffer);

[self checkFramebufferStatus];
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它参与了一个对象,checkFrameBufferStatus如下所示:

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status)
{
  case GL_FRAMEBUFFER_COMPLETE:
    JNLogString(@"Framebuffer complete.");
    return TRUE; …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es framebuffer ipad

7
推荐指数
1
解决办法
3566
查看次数

OpenGL渲染到纹理 - 通过FBO - 与正常纹理不正确显示

离屏渲染到纹理绑定的屏幕外帧缓冲对象应该是如此微不足道,但我遇到了一个问题,我无法绕过头脑.

我的完整示例程序(目前只有2D!)在这里:

http://pastebin.com/hSvXzhJT

请参阅下面的一些说明.

我正在创建一个rgba纹理对象512x512,将其绑定到FBO.此时不需要深度或其他渲染缓冲区,严格来说是2D.

以下非常简单的着色器渲染到此纹理:

顶点着色器:

varying vec2 vPos; attribute vec2 aPos;
void main (void) {
    vPos = (aPos + 1) / 2;
    gl_Position = vec4(aPos, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

在aPos中,这只是一个包含4 xy坐标的VBO,用于四边形(-1,-1 :: 1,-1 :: 1,1:-1,1)

因此,虽然帧缓冲分辨率理论上应该是512x512,但着色器将其"纹理"渲染到"全(关)屏幕四边形"上,遵循GLs -1..1 coords范例.

片段着色器:

varying vec2 vPos;
void main (void) {
    gl_FragColor = vec4(0.25, vPos, 1);
}
Run Code Online (Sandbox Code Playgroud)

所以它设置了一个完全不透明的颜色,红色固定为0.25,绿色/蓝色取决于x/y,介于0和1之间.

在这一点上,我的假设是渲染512x512纹理,仅显示-1..1全(关)屏幕四边形,片段阴影显示绿色/蓝色从0..1.

所以这是我的屏幕外设置.在屏幕上,我有另一个真正可见的全屏四边形与4 xyz坐标{-1,-1,1 ::: 1,-1,1 ::: 1,1,1 ::: -1,1, 1}.同样,现在这是2D所以没有矩阵,所以z总是1.

此四边形由不同的着色器绘制,只需渲染给定的纹理,即教科书GL-101样式.在我上面链接的示例程序中,我有一个简单的布尔切换doRtt,当这是假(默认)时,根本不执行渲染到纹理,这个着色器只显示使用当前目录中的texture.jpg.

这个doRtt = false模式显示第二个屏幕四重渲染器对于我当前的要求是"正确的"并按照我的要求执行纹理化:垂直重复两次和水平重复两次(稍后将被钳制,重复仅用于测试这里),否则使用NO纹理过滤或mipmapping进行缩放.

因此,无论窗口(以及视图端口)如何调整大小,我们总是会看到一个全屏四边形,其中单个纹理水平重复两次,垂直重复两次.

现在,使用doRtt = true,第二个着色器仍然可以完成它的工作,但纹理永远不会完全正确缩放 - 或绘制,我不确定,因为不幸的是我们不能只说"嘿gl将此FBO保存到磁盘调试目的".

RTT着色器执行一些部分渲染(或者可能是一个完整的渲染,再次无法确定屏幕外发生了什么......)特别是当您调整视口大小比默认大小小很多时,您会看到纹理之间的间隔重复,并非确实显示了我们非常简单的RTT片段着色器所期望的所有颜色.

(A)要么:512x512纹理是正确创建的,但我的代码没有正确映射(但是为什么doRtt = false任何给定的texture.jpg文件使用完全相同的简单纹理四边形着色器显示得很好?)

(B)或:512x512纹理没有正确渲染,不知何故rtt frag着色器根据窗口分辨率改变其输出 …

opengl framebuffer off-screen go render-to-texture

7
推荐指数
1
解决办法
2279
查看次数

如何检查当前在OpenGL中绑定哪个帧缓冲区对象?

我正在使用OpenGL帧缓冲对象.我创建了一个具有2种颜色纹理和深度纹理的帧缓冲对象.

我正在使用

glBindFramebuffer(GL_READ_FRAMEBUFFER, ID);
Run Code Online (Sandbox Code Playgroud)

要绑定我的帧缓冲区,但在控制台上我收到此警告

Redundant State change in glBindFramebuffer call, FBO 1 already bound
Run Code Online (Sandbox Code Playgroud)

如何检查我的哪些帧缓冲区已被绑定?我的意思是哪个OpenGL函数允许我检查已经绑定的帧缓冲区的ID,以便我可以防止冗余绑定.

c++ opengl graphics fbo framebuffer

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

在 macOS 上写入帧缓冲区

我想在 Mac 上重新创建本文中所示的程序。这可能吗?到目前为止,我的研究表明“不”,但我还不想放弃。Python 是首选,但我的目的很简单,大多数语言都可以。

编辑:为了详细说明我的目标,它将单个像素写入没有背景的屏幕上。我不在乎它们是否会被鼠标移动删除,如果有比帧缓冲区更好的方法,我会使用它。

python macos graphics framebuffer

7
推荐指数
1
解决办法
1345
查看次数