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

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结