标签: framebuffer

pygame.display.init() 对于非 root 用户失败

太;博士

我需要使用,但由于帧缓冲区驱动程序pygame的权限,它无法作为普通用户初始化屏幕。root 可以做,但用户不能做。用户位于“视频”组中,可以在 上书写。用户缺少什么权限才能工作。 遇到错误:pygame.display.init()/dev/fb0pygame.display.init()
pygame.error: Unable to open a console terminal

描述

所以,我尝试使用pygame来在帧缓冲区上显示内容/dev/fb0。要使用某些功能,我需要(例如pygame.Surface.convert)必须初始化显示器。但是,当调用时pygame.display.init()我遇到错误,但仅当不以 root 身份执行此操作时才会出现错误。

根据@Nodraak (参考),它与帧缓冲区驱动程序的权限有关 。

回答晚了,但我希望我能早点尝试一下:

您可能需要成为 root 才能使用帧缓冲区驱动程序。

(这对我的情况有帮助:RaspberryPi 2 没有运行 X,但连接了屏幕。我现在可以通过 SSH 或直接在 RPi 上打开显示器)

Atree -fupg / | grep fb | grep rwx 似乎没有显示任何可以由 root 执行但不能由其他人执行的二进制文件。我非常确定将我的用户添加到组中,或在某处调整文件权限就足以解决问题。

注意:出于安全原因,不能以 root 身份运行软件。

语境

  • 系统:树莓派
  • X 服务器:无
  • 屏幕:1(HDMI)
  • 连接:远程(SSH)

错误的根源

我正在尝试转换具有功能的表面pygame.Surface.convert(...)。但收到以下错误:

pygame.error: cannot convert without pygame.display initialized
Run Code Online (Sandbox Code Playgroud)

然而,初始化 …

python pygame framebuffer raspberry-pi sdl-2

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

OpenGL:如何实现"橡皮擦"工具?

我正在开发一款iPhone游戏,其中涉及绘图/绘画机制,我在尝试创建一个可以擦除已绘制内容的工具时遇到问题.

主要问题是被绘制的背景不是纯色而是静态图像或动画.我尝试在绘图中使用不同的混合选项和逻辑操作,但似乎没有任何效果.我是OpenGL的新手,所以我必须遗漏一些东西.

有小费吗?

编辑:为了提供更多信息,我正在为我的画笔使用纹理,并使用glVertexPointer()和glDrawArrays()来渲染它们.例如:

glBindTexture(GL_TEXTURE_2D, circleBrush);
glVertexPointer(3, GL_FLOAT, 0, verts);
glTexCoordPointer(2, GL_FLOAT, 0, coords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Run Code Online (Sandbox Code Playgroud)

编辑2:不幸的是,iPhone上没有模板缓冲区.:(

编辑3:iPhone上有Framebuffer对象,这就是我走的路.我还没有完全实现它,但到目前为止它看起来像我想要它的方式.感谢大家!

iphone opengl-es framebuffer

4
推荐指数
1
解决办法
4706
查看次数

拍摄嵌入式Linux Framebuffer的屏幕截图

我在评估套件(Zoom OMAP35x Torpedo Development Kit)上运行嵌入式Linux.该板有一个液晶显示器,我希望能够拍摄屏幕截图将它们转换为gif或png.我可以通过执行以下操作获取原始数据:"cp/dev/fb0 screen.raw",但我对如何将图像转换为gif或png格式感到困惑.

我玩过ImageMagick转换(例如:"convert -depth 8 -size 240x320 rgb:./ screen.raw -swap 0,2 -separate -combine screen.png"),但是无法获得看起来像的图像对.

有谁知道我可以尝试的任何其他工具?或者有没有人有使用ImageMagick的提示?

framebuffer imagemagick embedded-linux

4
推荐指数
2
解决办法
9037
查看次数

使用带有多重采样的glReadPixel()读取数据

目前我正在尝试从帧缓冲区读取像素数据,以便在IOS中捕获屏幕.使用以下代码设置帧缓冲区时,GlreadPixels命令工作正常: -

//buffers
// Create a depth buffer that has the same size as the color buffer.
glGenRenderbuffersOES(1, &m_depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24_OES, width, height);

// Create the framebuffer object.

glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES,
                             GL_RENDERBUFFER_OES, m_colorRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES,
                             GL_RENDERBUFFER_OES, m_depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
Run Code Online (Sandbox Code Playgroud)

但是当我使用深度缓冲和颜色缓冲进行多重采样时,glreadpixels()不会像以前的代码那样捕获任何像素数据....对于多次采样,我使用以下代码: -

glGenFramebuffersOES(1, &sampleFramebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, sampleFramebuffer);

//GLuint sampleColorRenderbuffer;
glGenRenderbuffersOES(1, &sampleColorRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, sampleColorRenderbuffer);
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_RGBA8_OES, width, height);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, sampleColorRenderbuffer);

//glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_RGBA8_OES, width, height);
//glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, sampleColorRenderbuffer);

GLuint sampleDepthRenderbuffer;
glGenRenderbuffersOES(1, &sampleDepthRenderbuffer); …
Run Code Online (Sandbox Code Playgroud)

multisampling opengl-es framebuffer glreadpixels ios

4
推荐指数
1
解决办法
5659
查看次数

从FBO到屏幕的OpenGL渲染

我们的想法是在不同颜色附件的FrameBuffer对象中渲染场景的特定部分,然后使用深度缓冲区为最终图像组合.在第一步中,我只想渲染到一个附件,然后再渲染到屏幕.EXT_framebuffer_object由于我的旧显卡,我正在使用过剩用于此目的和规格.在我的主要功能:

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitWindowSize(600, 512);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    int mainHandle = glutCreateWindow("Demo");
    glutSetWindow(mainHandle);
    glutDisplayFunc(RenderCallback);
    glutReshapeFunc(ReshapeCallback);
    glutIdleFunc(IdleCallback);
    glutKeyboardFunc(KeyboardCallback);
    glutSpecialFunc(ArrowKeyCallback);
    glutMouseFunc(MouseCallback);
    glutMotionFunc(MotionCallback);

    MotionCallback(0,0);
    atexit(ExitNx);

    // Setup default render states
    glClearColor(0.3f, 0.4f, 0.5f, 1.0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);

    // Setup lighting
    glEnable(GL_LIGHTING);
    float ambientColor[]    = { 0.0f, 0.1f, 0.2f, 0.0f };
    float diffuseColor[]    = { 1.0f, 1.0f, 1.0f, 0.0f };       
    float specularColor[]   = { 0.0f, 0.0f, 0.0f, 0.0f };       
    float position[]        = { 100.0f, 100.0f, 400.0f, 1.0f };     
    glLightfv(GL_LIGHT0, …
Run Code Online (Sandbox Code Playgroud)

opengl rendering framebuffer

4
推荐指数
1
解决办法
7902
查看次数

使用OpenGl ES 2.0进行模板处理

我试图找出一种方法来切出背景纹理的某个区域,以便在屏幕上不为该背景渲染某个自定义图案.例如: 在此输入图像描述

这个方块可以是任何图案.我正在使用Frame Buffer Object和Stencil Buffer来实现这种效果.这是代码:

fbo.begin();
//Disables ColorMask and DepthMask so that all the rendering is done on the Stencil Buffer
Gdx.gl20.glColorMask(false, false, false, false);
Gdx.gl20.glDepthMask(false);
Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST);
Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 1, 0xFFFFFFFF);
Gdx.gl20.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE);

stage.getSpriteBatch().begin();
rHeart.draw(stage.getSpriteBatch(), 1); //Draws the required pattern on the stencil buffer

//Enables the ColorMask and DepthMask to resume normal rendering
Gdx.gl20.glColorMask(true, true, true, true);
Gdx.gl20.glDepthMask(true);

Gdx.gl20.glStencilFunc(GL20.GL_EQUAL, 1, 0xFFFFFFFF);
Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);

background.draw(stage.getSpriteBatch(), 1); //Draws the background such that the background is not rendered on the required pattern, …
Run Code Online (Sandbox Code Playgroud)

opengl-es framebuffer stencil-buffer opengl-es-2.0 libgdx

4
推荐指数
1
解决办法
3529
查看次数

在Android中绘制叠加(系统范围)

有没有办法在任何Android应用程序之上绘制一个覆盖窗口?

我使用Android x86端口并拥有系统权限.

@Edit:叠加层下面的视图应该接收所有事件.

linux android overlay framebuffer

4
推荐指数
1
解决办法
3454
查看次数

Linux framebuffer图形和VSync

我正在用C语言制作适用于linux framebuffer的游戏.到目前为止,我有一个红色的100x100正方形,与鼠标一起移动,就像指针一样.我实现了双缓冲,它工作正常(方块不闪烁).问题是,横向发生了很多撕裂事件.我的意思是,当正方形在x轴上移动时,它就像它被水平分割,并且它的一部分比另一部分更加柔和.如果我继续移动它,这个"裂口"会在广场上从上到下慢慢传播.

我相信这是因为硬件在我将双缓冲区复制到主缓冲区的那一刻读取帧缓冲区.

我试图用FBIO_WAITFORVSYNC ioctl解决问题,但没有成功.

我有什么想法可以在帧缓冲区上做VSync吗?请在您的解释中添加细节,因为这是我第一次在基于Linux的操作系统上编写这样的东西,所以我可能不会理解.

这是我的代码:http://pastebin.com/KJ4iaVEL

linux graphics framebuffer

4
推荐指数
2
解决办法
5846
查看次数

如何获取/设置默认帧缓冲区的宽度和高度?

我想知道我的默认帧缓冲区的维度.我将设置视图端口读取到特定值不会影响/设置帧缓冲区的尺寸.是否有GL呼叫?

opengl framebuffer opengl-es-2.0

4
推荐指数
1
解决办法
8195
查看次数

OpenGL:Framebuffer,不完整的纹理附件

我已经搜索了几个小时来解决我的问题.首先.我有HD 7800系列和GPU,最新的驱动程序.

我正在尝试创建framebuffer类,它具有我需要的所有framebuffer函数.看起来我有渲染缓冲区工作,但绘制到纹理导致非常奇怪的错误.

FrameBuffer::FrameBuffer(int width, int height)
{
    createFrameBuffer();
//  createDepthBufferAttachment(width, height); //commented out for testing (THIS WORKS)
    createTextureAttachment(width, height);
//  createDepthTextureAttachment(width, height); //commented out for testing
    glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
        std::cerr << glCheckFramebufferStatus(GL_FRAMEBUFFER) << "\nFramebuffer failed to generate! 0\n";
    }
    unbindFrameBuffer();


}

FrameBuffer::~FrameBuffer()
{
    if (fbo != NULL)
        glDeleteFramebuffers(1, &fbo);
    if (colorTexture != NULL)
        glDeleteTextures(1, &colorTexture);
    if (depthBuffer != NULL)
        glDeleteRenderbuffers(1, &depthBuffer);
    if (depthTexture != NULL)
        glDeleteTextures(1, &depthTexture);
}

void FrameBuffer::createFrameBuffer(){
    glGenFramebuffers(1, &fbo);

}

void FrameBuffer::createTextureAttachment(int width, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl framebuffer

4
推荐指数
1
解决办法
4886
查看次数