PyOpenGL帧缓存

2023-11-17

安装
python -m pip install PyOpenGL PyOpenGL_accelerate -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
文档资料

PyOpenGL在Pypi的地址

PyOpenGL开发文档

PyOpenGL在python上与C的部分区别

GL开发文档

GLU开发文档

  参考书有《OpenGL Programming Guide》,俗称“红宝书”。

离屏渲染

  刚开始看OpenGL的时候,找到的资料和代码,都是调用glut或者glfw库,创建一个窗口,然后循环绘制和显示图片。但是有时候使用linux远程服务器,没有直接连一个显示屏,也没有窗口系统,这个时候有个方法是使用X11窗口系统,在远程服务器上启动X Client服务,在本地客户端电脑上启动X Server服务,实现远程桌面窗口系统,但是这样也很麻烦,我搞了半天也不行。

帧缓存

  查阅资料后,发现其实也很简单,即借助帧缓存对象framebuffer,实现离屏渲染。帧缓存对象对于离屏渲染技术、纹理贴图的更新,以及缓存乒乓技术的实现非常有意义。
  桌面窗口系统提供的帧缓存是唯一可以被图形服务器的显示系统所识别的帧缓存,即我们在屏幕上所看到的就是这个帧缓存。除此之外,应用程序也能创建一个帧缓存对象,这种帧缓存无法直接在显示屏上看到,但是能够用于离屏渲染技术。窗口系统自动创建的帧缓存有自己的缓存对象如颜色、深度和模板,但是自己在程序中创建的帧缓存是没有这些的,所以还需要自己创建颜色缓存、深度缓存或者模板缓存,以及创建额外的渲染缓存。

# 创建1个帧缓存
framebuffer = glGenFramebuffers(1)
# 绑定帧缓存
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer)
# 删除1个帧缓存
glDeleteFramebuffers(1, [framebuffer])
纹理附件

  完整的帧缓存需要两个东西:1.纹理附件,2.渲染缓存。纹理附件有几种类型

GL_COLOR_ATTACHMENT
GL_DEPTH_ATTACHMENT
GL_STENCIL_ATTACHMENT
GL_DEPTH_STENCIL_ATTACHMENT
# 创建纹理附件
texture = glGenTexture(1)
# 绑定纹理
glBindTexture(GL_TEXTURE_2D, texture)
# 创建二维纹理图片
#glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL)
glTextureStorage2D(texture, 1, GL_RGBA8, width, height)
# 将纹理附件关联到帧缓存
glNamedFramebufferTexture2D(framebuffer, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0)
# 抛弃帧缓存附件的所有内容
#glInvalidateFramebuffer()
渲染缓存

  渲染缓存是OpenGL所管理的溢出高效的内存区域,可以存储格式化的图像数据,渲染缓存中的数据只有关联到一个帧缓存对象之后才有意义,之后创建渲染缓存的存储空间,用来存储用于深度测试和模板测试的数据。

# 创建渲染缓存
rbo = glGenRenderbuffers(1)
# 绑定渲染缓存
glBindRenderbuffer(GL_RENDERBUFFER, rbo)
# 创建渲染缓存存储空间
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height)
# 将渲染缓存关联到帧缓存
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo)
# 删除渲染缓存
glDeleteRenderbuffers(1, rbo)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyOpenGL帧缓存 的相关文章

  • linux分区满了,如何进行扩容

    图片中可以看到挂载点 的利用率移到100 空间不够 所以要对其进行分区 1 先进入虚拟机设置里增大磁盘空间 注意 将25改成50 以扩大空间 这里一定要写比25大的数 因为他是 增加到 50GB 而不是 增加了25GB 2 下图可以看到 硬
  • 统计学习方法(九)EM算法

    参考博客 https www cnblogs com bigmoyan p 4550375 html https en wikipedia org wiki Expectation E2 80 93maximization algorith
  • 【网络编程】协议定制+Json序列化与反序列化

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 序列化与反序列化的概念 二 自定义协议设计一个网络计算
  • 软件测试重点

    第1章 软件测试概述 什么是软件测试 广义的概念 指软件生存周期中所有的检查 评审和确认工作 其中包括了对分析 设计阶段 以及完成开发后维护阶段的各类文档 代码的审查和确认 狭义概念 识别软件缺陷的过程 即实际结果与预期结果的不一致 软件测
  • 二项分布和泊松分布,二者的关系

    离散型随机变量中 经典的两个分布为二项分布和泊松分布 二项分布的定义 泊松分布的定义 注意 一 对泊松分布定义的右边式子 对k 0 1 2 求和的结果为1 即所有事件的概率之和为1 这可以从我们熟知的公式 e k 0 kk begin eq
  • 毕业设计-基于深度学习的人脸识别方法

    目录 前言 课题背景和意义 实现技术思路 一 人脸识别介绍 二 基于深度学习的人脸识别方法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各
  • Pytorch——关于模型调用(推理)时是否需要GPU的理解

    如果模型在训练的时候 是纯CPU训练的 那么调用 推理 时 就只CPU参与 如果模型在训练的时候 是用到了GPU训练的 那么调用 推理 时 就CPU GPU都会参与
  • 【教程】Pytorch DDP 分布式训练详解

    Pytorch 分布式训练 知乎 Getting Started with Distributed Data Parallel PyTorch Tutorials 2 0 1 cu117 documentation
  • SpringBoot系列十二:SpringBoot整合 Shiro

    1 概念 SpringBoot 整合 Shiro 2 具体内容 Shiro 是现在最为流行的权限认证开发框架 与它起名的只有最初的 SpringSecurity 这个开发框架非常不好用 但是千万不要 以为 SpringSecurity 没有
  • Java程序控制语句

    1 Java程序控制语句 程序控制可以定义为对程序语句执行的顺序进行的规定 有三种结构 1 1顺序结构 1 2分支语句 条件分支语句 switch case语句 单分支条件语句 二分之条件语句 嵌套条件语句 多分支条件语句 if 条件表达式
  • 不要再狂按空格键了!Word 里文字对齐推荐这4种方法

    到底如何才能快速对齐Word文字呢 今天就教大家4个好方法 不用敲空格键 2秒对齐所有文字 1 Tab键对齐 首先选中要对齐的文本 点击 视图 选中 标尺 在文字需要对齐的位置设置 制表位 接着鼠标点击文本前 然后再按一个 Tab键 立马就
  • Java List 根据ID 去重复

    在实战业务场景中 可能需要去重List 重复数据 直接看如下示例 1 代码示例 import cn hutool core collection ListUtil import cn hutool json JSONUtil import
  • mysql 自增键的上限后异常处理

    一般情况下对于自增键 会使用 int 自增键上限 2的32次方 1 4294967295 达到自增上限后 数据就无法继续插入 报 ERROR 1062 23000 Duplicate entry 4294967295 for key PRI
  • tcc分布式事务源码解析系列(一)之项目结构

    happylifeplat tcc 是什么 有什么功能 这是碧桂园旺生活解决分布式事务的TCC开源方案 github地址 支持dubbo springcloud等rpc框架进行分布式事务 本地事务存储 支持redis mogondb zoo
  • python 自建kafka消息生成和消费小工具

    要将 Kafka 的消息生产和消费转换为 API 接口 我们可以使用 Python 的 Web 框架 其中 Flask 是一个轻量级且易于使用的选择 下面是一个简单的例子 使用 Flask 创建 API 来生成和消费 Kafka 消息 1
  • Axios + Typescript的使用

    rest service ts import axios AxiosInstance AxiosRequestConfig AxiosResponse from axios export class Api private api Axio
  • 34. 在排序数组中查找元素的第一个和最后一个位置——给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

    题目 34 在排序数组中查找元素的第一个和最后一个位置 力扣 给定一个按照升序排列的整数数组 nums 和一个目标值 target 找出给定目标值在数组中的开始位置和结束位置 如果数组中不存在目标值 target 返回 1 1 解答 方法一

随机推荐

  • 树莓派raspberry pi 4 SSH默认密码无法登录解决办法

    以前玩过一段时间树莓派 只要开通ssh就可以 默认用户pi 默认密码 raspberry 远程连接就可以 但今天再玩却死活无法登录 如下 出了什么幺蛾子哦 上网一查 才知道pi账号在最近的raspberry pi os中因为安全原因已经删除
  • ADS1.2出现erro starting external process,Process error code 87(0x57)参数错误的解决办法

    系统兼容问题 在ADS的兼容性上选择xp sp2兼容模式 以管理员权限启用
  • Qt使用QScrollArea滚动条动态添加按键

    mainwindow h ifndef MAINWINDOW H define MAINWINDOW H include
  • 一篇文章吃透 CSS3 属性: transition过渡 与 transform动画

    最近有人私信我 CSS 中的 transition 过渡 和 transform 动画 属性 这两个属性的参数确实比较复杂 它们可以做出 CSS 的一些基础动画效果 平移 旋转 倾角 等等 这些也是我早期学习 CSS 的难记易忘之处 今天给
  • c语言中n的阶乘的流程图,n的阶乘流程图(计算机n的阶乘流程图)

    n的阶乘流程图 计算机n的阶乘流程图 2020 05 24 15 32 32 共10个回答 第一步 让s 1 i 1第二步输入要算的阶乘的对应的正整数n第三步让s s i i i 1第四步判断i是否大于n 若大于打印出S否则返回第三步s 1
  • (四)activiti7大服务service详解——2 RuntimeService

    前言 在 Activiti 中 每当一个流程定义被启动一次之后 都会生成一个相应的流程对象实例 Runtime Service 提供了启动流程 查询流程实例 设置获取流程实例变量等功能 此外它还提供了对流程部署 流程定义和流程实例的存取服务
  • mysql学习笔记(2)_DML(Data Manipulation Language)

    DML Data Manipulation Language 数据操作语言 插入数据 insert 修改数据 update 删除数据 delete DML Data Manipulation Language 数据操作语言 插入语句 方式一
  • C++实现堆排序算法

    C 实现堆排序算法 堆排序是一种高效的排序算法 它的时间复杂度为O nlogn 同时也非常稳定 该算法使用了堆的数据结构来实现排序 堆通常使用数组实现 下面就让我们来看看如何使用C 来实现堆排序算法 首先 我们需要了解堆的定义和性质 堆是一
  • unity工程运行一段时间堆栈溢出,unity崩溃fatal error in GC. stack overflow

    在这里做一下标记 困扰了我一天的难题 就是栈溢出导致软件奔溃的问题 gc报错 堆栈溢出 代码问题 没有指出具体溢出位置 需要自己慢慢排查 多个个脚本大量的代码排查起来很艰难 首先要抓住的重点位置 1 使用whiletrue的地方 2 使用递
  • 数据库开发考试复习

    文章目录 B树索引结构 B树索引的结构和使用方式 B树索引的使用 什么时候使用B树索引 为什么为外键建立索引是普遍的要求 上面一个问题的例外情况 IOT 大概率不考 B树索引练习 索引 系统生成键 含有索引但未使用的几种情况 位图索引 哈希
  • Unity的C#编程教程_62_语言集成查询 LINQ 详解及应用练习

    文章目录 LINQ Querys 1 Any 2 Contains 3 Distinct 4 Where Challenge Hands on with LINQ LINQ Order by Descending Challenge Fil
  • 代码注释:机器学习实战第8章 预测数值型数据:回归

    写在开头的话 在学习 机器学习实战 的过程中发现书中很多代码并没有注释 这对新入门的同学是一个挑战 特此贴出我对代码做出的注释 仅供参考 欢迎指正 coding gbk from numpy import 作用 从文件中导入数据 输入 文件
  • RocketMQ系列之架构浅谈

    RMQ的架构设计 下面我从GitHub上截取了一张RMQ的源码结构图 图中我框框出来的9大模块 基本就构成了整个RMQ的内部结构 上面9大模块的依赖层次主要如下 依赖越强的越处于底层 下面介绍下最上层的4个模块 这4个模块中工具命令行就不讲
  • 使用cpio命令导致系统几乎崩溃的一次经历

    做嵌入式linux开发 内核编译生成了一个initramfs data cpio文件 发现是一个根文件系统的压缩文件 在windows下可以用IZArc解压 但不能用tar gunzip解压 Windows下使用IZArc解压时 符号链接文
  • CentOS 8 逻辑卷管理LVM详解(扩容、快照等)

    逻辑卷管理LVM 一 概述 二 逻辑卷管理布局 三 LVM1和LVM2 四 使用LVM管理逻辑卷 1 物理卷 1 创建物理卷 2 删除物理卷 2 卷组 1 创建卷组 2 扩展卷组 3 删除卷组 4 减小卷组 3 逻辑卷 1 创建逻辑卷 2
  • 基于TCP的socket通信

    本文转载自http blog csdn net chocolate001 article details 6612201 基于TCP 面向连接 的socket编程 分为客户端和服务器端 客户端的流程如下 1 创建套接字 socket 2 向
  • 修片要点+规则

    一 曝光度 相机的曝光补偿 1 1 快速修改 1 2 细改 二 对比度 白和黑的对比程度 黑的更黑 白的更白 越小越朦胧 越大越清晰 可以让色彩更鲜艳 2 1 設置對比度 三 高光 控制高光部分的曝光度 3 1 設置高光 四 阴影 控制阴影
  • 微服务契约测试框架-Pact

    契约测试 契约测试的思想就是将原本的 Consumer 与 Provider 间同步的集成测试 通过契约进行解耦 变成 Consumer 与 Provider 端两个各自独立的 异步的单元测试 契约测试的优点 契约测试与单元测试以及其它测试
  • PT100所谓的二线制,三线制,四线制如何接线(详解)

    PT100所谓的二线制 三线制 四线制如何接线 铂热电阻是利用铂丝的电阻值随着温度的变化而变化的 那么铂热电阻的三种接线方法以及消除误差的原理是怎么样的呢 二线制 二线制 在热电阻的两端各连接一根导线来引出电阻信号的方式叫二线制 这种引线方
  • PyOpenGL帧缓存

    安装 python m pip install PyOpenGL PyOpenGL accelerate i http mirrors aliyun com pypi simple trusted host mirrors aliyun c