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

相关文章

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from