18.3 OpenGL读取和复制像素:复制像素

2024-02-17 14:12
文章标签 读取 复制 像素 opengl 18.3

本文主要是介绍18.3 OpenGL读取和复制像素:复制像素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

复制像素 Copying Pixels

几个命令

在帧缓冲区的不同区域之间复制像素数据(参见第18.3.1节)。

或者在纹理和渲染缓冲区的不同区域之间复制像素数据(参见第18.3.2节)。

对于所有这些命令,如果源和目标相同或者是相同底层纹理图像的不同视图,并且如果源和目标区域在帧缓冲区、渲染缓冲区或纹理图像中重叠,那么复制操作产生的像素值是未定义的。

位块传输像素矩形 Blitting Pixel Rectangles

要将像素值矩形从源帧缓冲区的一个区域传输到目标帧缓冲区的另一区域

  • void glBlitFramebuffer( int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, bitfield mask, enum filter );
  • void glBlitNamedFramebuffer( uint readFramebuffer, uint drawFramebuffer, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, bitfield mask, enum filter );

glBlitFramebuffer:用于操作绑定到READ_FRAMEBUFFERDRAW_FRAMEBUFFER的源和目标帧缓冲区。

glBlitNamedFramebuffer:用于操作给定名称的源和目标帧缓冲区对象。

如果没有帧缓冲区绑定到READ_FRAMEBUFFERDRAW_FRAMEBUFFER(对于glBlitFramebuffer),或者readFramebufferdrawFramebuffer为零(对于glBlitNamedFramebuffer),则默认的读或绘制帧缓冲区将用作相应的源或目标帧缓冲区。

mask参数是零,或者是一个或多个值的按位OR运算的结果,指示要复制哪些缓冲区。这些值可以是COLOR_BUFFER_BITDEPTH_BUFFER_BITSTENCIL_BUFFER_BIT,它们在第17.4.3节中有描述。像素对应于这些缓冲区的值从源矩形(srcX0, srcY0)左下角(srcX1, srcY1)右上角定义的位置复制到目标矩形(dstX0, dstY0)左下角(dstX1, dstY1)右上角定义的位置。

在BlitFramebuffer操作时,如果源和目标矩形的尺寸不匹配,则源图像将被拉伸以适应目标矩形。filter参数必须是LINEARNEAREST,指定如果图像被拉伸时要应用的插值方法。仅当源和目标的尺寸相同时,才不应用滤波。如果源或目标矩形指定负宽度或高度(X1 < X0或Y1 < Y0),则图像在相应方向上翻转。如果源和目标矩形都为同一方向指定了负宽度或高度,那么不执行翻转操作。如果选择了线性滤波,并且线性采样的规则要求在源缓冲区的边界外采样,则就好像执行了CLAMP_TO_EDGE纹理采样。

如果源和目标缓冲区相同,并且源和目标矩形重叠,则Blit操作的结果是未定义的。

在图像之间复制 Copying Between Images

  • void glCopyImageSubData( uint srcName, enum srcTarget, int srcLevel, int srcX, int srcY, int srcZ, uint dstName, enum dstTarget, int dstLevel, int dstX, int dstY, int dstZ, sizei srcWidth, sizei srcHeight, sizei srcDepth );

在两个图像对象之间复制一个区域的纹理数据。这些图像对象可以是纹理或渲染缓冲区。该命令的主要功能在于高效地将源图像子区域的数据直接拷贝到目标图像的相应子区域内,类似于 CPU 中的 memcpy 操作。

glCopyImageSubData 不执行通用转换操作,如缩放、重置大小、混合、色彩空间转换或格式转换。它仅允许在兼容的内部格式之间进行复制,包括某些类型的压缩和未压缩内部格式之间的复制(具体规则参见表 18.4)。这种复制不会进行实时的压缩或解压缩。从非压缩内部格式到压缩内部格式的复制时,每个未压缩数据的纹理像素会变成一块压缩数据;而从压缩内部格式到非压缩内部格式时,一块压缩数据会变成一个未压缩数据的纹理像素。此时,未压缩格式的纹理像素大小必须与压缩格式的块大小相同。

函数参数说明如下:

  • srcNamesrcTarget:标识源图像对象的名字及其目标类型。
  • dstNamedstTarget:标识目标图像对象的名字及其目标类型。
  • srcLeveldstLevel:分别指定源和目标的层级细节,在纹理中为有效的 mip 级别,在渲染缓冲区中则必须为零。
  • srcX, srcY, srcZ:定义源图像中矩形子区域的左下角纹理坐标。
  • dstX, dstY, dstZ:定义目标图像中矩形子区域的左下角纹理坐标。
  • srcWidth, srcHeight, srcDepth:定义源和目标子区域的宽度、高度和深度(对于一维数组或多维纹理可能是数组切片数)。

源和目标子区域都必须完全位于各自图像对象所指定层级内,并且尺寸始终以纹理像素单位给出,即使对于压缩纹理格式也是如此。

此函数支持一次性复制一维数组、二维数组、立方体贴图数组或多维纹理的多个切片,或者复制立方体贴图的不同面。只需通过 srcZdstZ 参数指定起始切片,并使用 srcDepth 指定要复制的切片数量。

glCopyImageSubData 函数认为两个内部格式兼容,如果满足以下条件之一:

  1. 格式相同,并且作为基本内部格式时,两个图像的有效内部格式也相同。
  2. 根据用于纹理视图的兼容性规则(在第 8.18 节定义),两个格式被认为是兼容的,特别是当它们在同一张表格 8.22 的同一行列出时。
  3. 其中一个格式是压缩的,另一个是未压缩的,并且这两个格式在表 18.4 中处于同一行。

当存在重叠复制时,会导致未定义的像素值,正如第 18.3 节介绍所述。

这篇关于18.3 OpenGL读取和复制像素:复制像素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718030

相关文章

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os