标签: framebuffer

OpenGL 中的透明 FrameBuffer 背景

我想使用 glClear 和 glClearColor 用包括 alpha 透明度的颜色填充帧缓冲区。然而,当绑定到渲染到屏幕的纹理时,帧缓冲区总是渲染为不透明的。

我希望渲染到帧缓冲区的所有内容都保持其透明度。我只是想改变背景。

请参阅以下代码:

def create_texture(surface):
surface.texture = glGenTextures(1)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity() #Loads model matrix
glBindTexture(GL_TEXTURE_2D, surface.texture) #Binds the current 2D texture to the texture to be drawn
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) #Required to be set for maping the pixel data
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) #Similar as above
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, surface.surface_size[0], surface.surface_size[1], 0, GL_RGBA,GL_UNSIGNED_BYTE, surface.data) #Put surface pixel data into texture
if surface.data == None:
    setup_framebuffer(surface)
    c = [float(sc)/255.0 for sc in surface.colour] #Divide colours by 255 …
Run Code Online (Sandbox Code Playgroud)

python opengl alphablending framebuffer pyopengl

5
推荐指数
1
解决办法
5054
查看次数

如何将16位RGB帧缓冲区转换为可视格式?

我正在设备上使用其他人的代码,该设备可以将图像输出/dev/fb/0并显示在视频上或通过网络发送到客户端应用程序.

我无法访问客户端应用程序的旧源代码,但我知道以下有关数据的信息:

  • 720×480
  • 16位
  • RGB(我不确定它是5,5,5还是5,6,5)
  • RAW(无头标)
  • cat-能够 /dev/fb/0
  • 675KB

如何为此标题或将其转换为JPEG,BMP或RAW类型,然后我可以在桌面应用程序中查看?

最终,我希望它在浏览器中是jpeg和可见的,但是我能用眼睛看到的任何东西现在都可以使用.

成功

(见下面的评论)

ffmpeg \
  -vcodec rawvideo \
  -f rawvideo \
  -pix_fmt rgb565 \
  -s 720x480 \
  -i in-buffer.raw \
  \
  -f image2 \
  -vcodec mjpeg \
  out-buffer.jpg
Run Code Online (Sandbox Code Playgroud)

尝试失败

在宽度方向上三次显示图像,几乎没有颜色,并垂直压扁:

rawtoppm -rgb -interpixel 720 480 fb.raw > fb.ppm
Run Code Online (Sandbox Code Playgroud)

显示图像,但条纹和垂直压扁和颜色不好:

rawtoppm -rgb -interrow 720 480 fb.raw > fb.ppm
Run Code Online (Sandbox Code Playgroud)

与上述类似

convert -depth 16 -size 720x480 frame_buffer.rgb fb.jpeg
Run Code Online (Sandbox Code Playgroud)

rgb ffmpeg framebuffer imagemagick

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

OpenGL 帧缓冲区渲染到纹理不起作用

我正在尝试使用帧缓冲区来创建使用 Java 和 JOGL 的发光效果,但是我遇到了问题。目前,我的目标是将带有照明纹理的飞船模型渲染为帧缓冲纹理,然后将帧缓冲纹理绘制为三角形扇形四边形。我正在运行 OpenGL 2.1 和/或 2.0 这是我生成帧缓冲区及其纹理的代码:

private int createFrameBuffer(GL2GL3 gl) {
    _frameBufferTextureId = GLHelper.makeTextureBuffer(gl, GL2GL3.GL_RGBA, _width / 2, _height / 2, 0, GL2GL3.GL_RGBA,
            GL2GL3.GL_UNSIGNED_BYTE, GL2GL3.GL_TEXTURE_MIN_FILTER, GL2GL3.GL_TEXTURE_MIN_FILTER, GL2GL3.GL_REPEAT, null);
    int frameBufferId = GLHelper.makeFrameBuffer(gl, _frameBufferTextureId, _width / 2, _height / 2);
    return frameBufferId;
}

public static int makeTextureBuffer(GL2GL3 gl, int glEnumInternalFormat, int width, int height, int border,
        int glEnumPixelFormat, int glEnumPixelType, int glEnumMinFilter, int glEnumMagFilter, int glEnumWrapMode,
        File textureFile) {
    ByteBuffer textureDataBuffer = null;
    if (textureFile != null) …
Run Code Online (Sandbox Code Playgroud)

java opengl textures framebuffer jogl

5
推荐指数
1
解决办法
2762
查看次数

有没有办法在无头机器上使用硬件加速OpenGL的应用程序?

存在一类使用opengl来提供硬件加速但不基于GUI的应用程序.但是,在默认情况下,使用opengl似乎必须运行带有GLX的X服务器(在同一个虚拟终端上)才能使这些应用程序正常运行.

我的具体案例是试图在无头机器上使用gstreamer的gl插件,但我问的是一个更普遍的问题.

  • 有没有办法解决这个问题(尤其是在不修改原始代码的情况下)?

我一直在尝试使用framebuffer内核模块进行研究,但不是很远.

linux opengl command-line framebuffer hardware-acceleration

5
推荐指数
1
解决办法
1343
查看次数

带有Cg的OpenGL中的多个渲染目标

我试图(徒劳地)使用OpenGL和NVIDIA的Cg着色器系统设置MRT,最终目的是推迟渲染。我已经成功为单个目标同时使用了着色器和“渲染到纹理”,但是当我尝试将一个对象渲染到多个渲染目标时,它在任何一个中都无法显示。

我以以下方式设置帧缓冲区对象:

// Initialize textures
// (I'll spare you the code since I've  done that without issues)

// Initialize the FBO
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glGenRenderbuffers(1, &depthBuff);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuff);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                          GL_RENDERBUFFER, depthBuff);

// -snip-

// Bind each texture we want to use to the FBO at rtNum
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + rtNum,
                       GL_TEXTURE_2D, tex->getID(), 0);
// Check to make sure we're good to go
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
    throw Exceptions::GLException("Frame buffer object is not complete.", …
Run Code Online (Sandbox Code Playgroud)

opengl shader cg framebuffer render-to-texture

5
推荐指数
1
解决办法
1459
查看次数

glClear() 在 Intel HD 4000 (GL 4.0) 上提供 GL_OUT_OF_MEMORY 而不是 GeForce (GL 4.2) ......为什么?

现在,这是一种非常奇怪的行为。

TL;DR——在渲染到纹理设置中,在调整窗口(帧缓冲区 0)大小时,只有下一次调用glClear(GL_COLOR_BUFFER_BIT)绑定帧缓冲区 0(窗口的客户区)会给出GL_OUT_OF_MEMORY,仅在两个中的一个GPU,但是渲染仍然正确且正确地进行。

现在,所有重要的细节:

所以这是在带有两个 GPU 的 Vaio Z 上(可以通过机器上的物理切换按钮切换到):

  1. OpenGL 4.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2(GLSL:4.20 NVIDIA 通过 Cg 编译器)

  2. OpenGL 4.0.0 - Build 9.17.10.2867 @ Intel Intel(R) HD Graphics 4000 (GLSL: 4.00 - Build 9.17.10.2867)

我的程序在使用 GLFW 64 位的 Win 7 64 位下的 Go 1.0.3 64 位。

我有一个相当简单直接的渲染到纹理“迷你管道”。首先,普通 3D 几何体使用最简单的着色器(没有照明,什么都没有,只有纹理三角形网格,它们只是一些立方体和平面)渲染到具有深度/模板渲染缓冲区作为深度/模板附件和texture2D 作为颜色附件。对于纹理,所有过滤都被禁用,mip-maps 也是如此。

然后我渲染一个全屏四边形(实际上是一个“超大”全屏三边形),只是从带有 texelFetch(tex, gl_FragCoord.xy, 0) 的所述帧缓冲区纹理(颜色附件)中采样,因此不使用包装。

两个 GPU 都可以很好地呈现这一点,无论是在我强制执行核心配置文件还是不执行核心配置文件时。没有为此报告任何 GL 错误,所有渲染也按预期进行。除非我在使用 Intel HD 4000 GPU 的 GL 4.0 渲染器(在 Core …

opengl framebuffer go render-to-texture

5
推荐指数
1
解决办法
2186
查看次数

读取WebGLTexture中的像素(将WebGL渲染到纹理)

我正在GPU上生成纹理并将其渲染到我自己的帧缓冲对象.它工作正常,纹理呈现为WebGLTexture,我可以传递给其他着色器.但是我想在javascript中访问WebGLTexture像素.有没有办法实现这一目标?

目前我正在使用gl.ReadPixels在我将纹理绘制到我的帧缓冲区后读取像素.这工作正常,但如果我可以直接访问WebGLTextureObject中的像素会不会更好?

我想要实现的是:我有GLSL perlin噪声着色器,可以在GPU上渲染高清高度图和法线贴图.我想将高度图传递给CPU,以便我可以为网格生成顶点.我当然可以将顶点定位在顶点着色器中,但我需要在CPU中进行碰撞检测.

我希望我的问题很明确.欢迎任何反馈!

谢谢!

javascript textures framebuffer webgl

5
推荐指数
1
解决办法
5376
查看次数

有没有办法配置 xorg 使用帧缓冲设备作为主监视器?

我有一个带 GPIO 显示的 Raspberry Pi。我目前将它设置为 /dev/fb1 中的帧缓冲设备。有没有办法让它成为 X 窗口的默认或主要显示?我最终试图为它绘制图形,我最初计划使用 DirectFB 和 SDL,但 DirectFB 是 pi 的 alpha。我也尝试过使用 SDL1.2,因为它支持帧缓冲,但我不知道如何让 SDL 选择要绘制的帧缓冲设备而不使用 DirectFB。

我考虑使用 SDL 将我的简单 GUI 的每一帧准备为原始图像,并使用 mmap 将其 blit 到 /dev/fb1 而不是使用 SDL 的内置绘图函数,但我觉得这是实现我的目标的一种糟糕方式。

我认为如果我可以让 xorg 使用我的帧缓冲设备作为主监视器,我就不必担心做任何特殊的事情来让 SDL 绘制我的图像文件。但我不太确定 xorg 是如何工作的,以及这是否可能。

任何人的任何见解或帮助都会有很大帮助!一个星期以来,我一直在解决这个问题,寻找不同的可能性。

c framebuffer xorg raspberry-pi

5
推荐指数
1
解决办法
1747
查看次数

使用 Gstreamer 流式传输帧缓冲区

如何使用 Gstreamer 读取帧缓冲区 (/dev/fb0)?

我正在尝试使用 RP 上的硬件 h264 编码器读取 Raspberry PI 上的帧缓冲区并将其流式传输到我的笔记本电脑。

首先我尝试了这个链接:https : //www.raspberrypi.org/forums/viewtopic.php?t=43227&p=486061

并使用了命令:

gst-launch-1.0 -v multifilesrc location=/dev/fb0 ! videoparse format=29 framerate=30/1 ! decodebin ! videoconvert ! omxh264enc ! rtph264pay ! gdppay ! tcpserversink host=192.168.11.100 port=5000
Run Code Online (Sandbox Code Playgroud)

但是视频没有垂直同步。

然后我在 Qt 中找到了这个Render OpenGL 场景并将其流式传输到 HTML5 界面

并尝试:

gst-launch-1.0 -v filesrc location=/dev/fb0 blocksize=1920000 ! video/x-raw,format=BGRA,width=800,height=600,framerate=1/1 ! videoconvert ! video/x-raw,format=RGB,framerate=1/1 ! videoflip method=vertical-flip ! videoscale ! video/x-raw,width=400,height=300 ! imagefreeze ! video/x-raw,format=RGB,framerate=30/2 ! clockoverlay shaded-background=true font-desc="Sans 38" ! omxh264enc …
Run Code Online (Sandbox Code Playgroud)

framebuffer gstreamer raspberry-pi

5
推荐指数
0
解决办法
2789
查看次数

使用ctypes从相机读取帧缓冲区

我在使用python读取相机的帧缓冲区时遇到问题。相机(Xenics)通过USB连接,相机随附一个dll。我使用ctypes访问此dll。我使用的代码主要受lantz的python模块(lantz_drivers_xenics)启发。
dll提供了XC_CopyFrameBuffer我用来将帧缓冲区复制到numpy数组的功能。

虽然原则上采集工作正常,但麻烦在于以中等或高速连续读取帧缓冲区。相机随附的已编译软件能够以24 fps的速度读出相机。在我的程序中,我想读取5到25 fps之间的帧缓冲区。但是,我无法达到此值,因为调用XC_CopyFrameBuffer函数所需的时间在0到〜0.5秒之间;它通常很低,但是大约每三帧大约需要0.5秒。

我的真实程序更复杂,使用线程并处理获取的图像。但是我将代码简化为一个重现问题并已附加的最小示例。它的文本和图形输出如下所示。我的问题是:

  1. 有没有人遇到过类似的相机问题?
  2. 有没有人使用过Xenics相机,并通过python中的ctypes连接到它,并可以提供一个可行的示例?
  3. 我(和/或lantz_drivers_xenics)使用dll的方式中是否存在一些明显或隐藏的问题?

这是我正在使用的代码:

import time
import ctypes 
import threading
import numpy as np
from numpy.ctypeslib import ndpointer


calibration_file =  r"C:\Path\to\some\calibrationfile.xca"
dll = "C:\\Programme\\X-Control\\xcamera.dll"
lib = ctypes.WinDLL(dll) #for xcamera we need ctypes.WinDLL

exposure_time = 300 #microseconds (us)
readlock = threading.Lock()

#add types    
lib.XC_OpenCamera.argtypes = [ctypes.c_uint]
lib.XC_CloseCamera.argtypes = [ctypes.c_uint]
lib.XC_IsInitialised.argtypes = [ctypes.c_uint]
lib.XC_LoadFromFile.argtypes = [ctypes.c_uint, ctypes.c_char_p]
lib.XC_LoadCalibrationPack.argtypes = [ctypes.c_uint, ctypes.c_char_p]
lib.XC_SetGainCamera.argtypes = [ctypes.c_uint, ctypes.c_double]
lib.XC_SetIntegrationTime.argtypes …
Run Code Online (Sandbox Code Playgroud)

python camera ctypes framebuffer driver

5
推荐指数
0
解决办法
727
查看次数