CN111047501A - 一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 - Google Patents
一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 Download PDFInfo
- Publication number
- CN111047501A CN111047501A CN201911125908.4A CN201911125908A CN111047501A CN 111047501 A CN111047501 A CN 111047501A CN 201911125908 A CN201911125908 A CN 201911125908A CN 111047501 A CN111047501 A CN 111047501A
- Authority
- CN
- China
- Prior art keywords
- copy
- tile
- buffer area
- buffer
- opengl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
本发明涉及计算机图形学技术领域,尤其涉及一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法。本发明提供了一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,该方法包括如下步骤:1)拷贝范围的参数计算:2)y方向拷贝像素的处理:3)x方向拷贝像素的处理:4)tile行像素处理:其中,tile表示4x4像素块,tile行表示4个像素行。本发明解决了当拷贝的坐标位于缓冲区外,或者拷贝宽高大于缓冲区时,容易出现的读取越界或者拷贝错位问题,降低了GPU硬件的拷贝出错率,并且提升了拷贝性能。正确的实现了针对多个OpenGL API(glCopyTexImage*、glCopyTexSubImage*、glCopyConvolutinFilter*、glCopyColorTable、glCopyColorSubTable、glReadPixels)的拷贝缓冲区功能。
Description
技术领域
本发明属于计算机图形学技术领域,涉及一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法。
背景技术
在图形处理器芯片(下简称GPU)设计中,OpenGL API定义的拷贝函数(glCopyTexImage*、glCopyTexSubImage*、glCopyConvolutinFilter*、glCopyColorTable、glCopyColorSubTable、glReadPixels)支持从缓冲区拷贝像素,但是OpenGL并没有定义当拷贝坐标在缓冲区外时,拷贝的像素该如何处理。GPU为了提升性能,在进行像素读取及存储时是不会逐像素写入的,当拷贝的坐标位于缓冲区外,或者拷贝宽高大于缓冲区时,很容易处理读取越界或者拷贝错位,这是需要解决的技术问题。
发明内容
本发明目的是提供一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法。
本发明的技术解决方案是:
一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,所述方法包括如下步骤:
1)拷贝范围的参数计算:
2)y方向拷贝像素的处理:
3)x方向拷贝像素的处理:
4)tile行像素处理:
其中,tile表示4x4像素块,tile行表示4个像素行。
进一步的,所述步骤1)为:
根据输入的拷贝坐标和宽高计算超过缓冲区上边界的高度,x和y的正负方向拷贝长度、拷贝起点坐标、拷贝起点tile坐标,以及x和y的正方向拷贝的tile个数;
根据y的负方向拷贝长度计算y的负方向拷贝tile个数,以及y方向总共拷贝的tile个数;
其中,设定缓冲区的左下角坐标(x,y)为原点。
进一步的,所述步骤2)包括:
2.1)拷贝超出缓冲区下边界的像素:
y的负方向拷贝tile个数就是超出缓冲区下边界的需要拷贝的tile行个数,并且这些tile不需要经过拷贝过程,直接给0,
对于第一个tile行需要根据y的负方向拷贝长度计算tile行的起始位置,其他情况tile行的起始位置都是0,结束位置都是4;
2.2)拷贝缓冲区内的像素:
根据拷贝起点tile坐标和x的正方向拷贝的tile个数计算拷贝缓冲区内的tile坐标,根据tile坐标从缓冲区读tile行像素;
2.3)拷贝超出缓冲区上边界的像素:
这些tile同样不需要经过拷贝过程,直接给0,tile行的开始位置都是0,对于最后一个tile行,tile行的结束位置根据超过缓冲区上边界的距离计算,其他tile行的结束位置都是4。
进一步的,所述步骤3)为:
处理高度方向在缓冲区内的tile行像素,在读取的像素行前保留x方向负的拷贝长度,这些像素全部用0填充;
对于缓冲区拷贝的第一个tile行,tile行的起始位置为0,根据拷贝起点坐标计算tile行的起始位置;
再根据拷贝起点坐标和y的正方向拷贝长度计算tile行的结束位置。
进一步的,所述步骤4)为:
将拷贝的tile行像素进入OpenGL定义的图像管线,当tile行像素完成管线处理后重新转入步骤2)开始下一个tile行像素的读取;
当全部tile行处理完成后,基于OpenGL拷贝命令的GPU拷贝缓冲区结束。
本发明的有益效果:
本发明解决了当拷贝的坐标位于缓冲区外,或者拷贝宽高大于缓冲区时,容易出现的读取越界或者拷贝错位问题,降低了GPU硬件的拷贝出错率,并且提升了拷贝性能。
正确的实现了针对多个OpenGL API(glCopyTexImage*、glCopyTexSubImage*、glCopyConvolutinFilter*、glCopyColorTable、glCopyColorSubTable、glReadPixels)的拷贝缓冲区功能。
附图说明
图1为本发明的算法流程图;
具体实施方式
下面结合附图和具体实施例,对本发明的技术方案进行清楚、完整地表述。显然,所表述的实施例仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提所获得的所有其他实施例,都属于本发明的保护范围。
本发明提供了一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,该方法包括如下步骤:
1)拷贝范围的参数计算:
根据输入的拷贝坐标和宽高计算超过缓冲区上边界的高度,x和y的正负方向拷贝长度、拷贝起点坐标、拷贝起点tile坐标,以及x和y的正方向拷贝的tile个数;
根据y的负方向拷贝长度计算y的负方向拷贝tile个数,以及y方向总共拷贝的tile个数;
其中,tile表示4x4像素块,tile行表示4个像素行;
设定缓冲区的左下角坐标(x,y)为原点;
2)y方向拷贝像素的处理:
2.1)拷贝超出缓冲区下边界的像素:
y的负方向拷贝tile个数就是超出缓冲区下边界的需要拷贝的tile行个数,并且这些tile不需要经过拷贝过程,直接给0,
对于第一个tile行需要根据y的负方向拷贝长度计算tile行的起始位置,其他情况tile行的起始位置都是0,结束位置都是4;
2.2)拷贝缓冲区内的像素:
根据拷贝起点tile坐标和x的正方向拷贝的tile个数计算拷贝缓冲区内的tile坐标,根据tile坐标从缓冲区读tile行像素;
2.3)拷贝超出缓冲区上边界的像素:
这些tile同样不需要经过拷贝过程,直接给0,tile行的开始位置都是0,对于最后一个tile行,tile行的结束位置根据超过缓冲区上边界的距离计算,其他tile行的结束位置都是4;
3)x方向拷贝像素的处理:
处理高度方向在缓冲区内的tile行像素,在读取的像素行前保留x方向负的拷贝长度,这些像素全部用0填充;
对于缓冲区拷贝的第一个tile行,tile行的起始位置为0,根据拷贝起点坐标计算tile行的起始位置;
再根据拷贝起点坐标和y的正方向拷贝长度计算tile行的结束位置;
4)tile行像素处理:
将拷贝的tile行像素进入OpenGL定义的图像管线,当tile行像素完成管线处理后重新转入步骤2)开始下一个tile行像素的读取;
当全部tile行处理完成后,基于OpenGL拷贝命令的GPU拷贝缓冲区结束。
实施例:
下面结合附图对本发明做进一步详细描述,请参阅图1。
一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,包括以下步骤:
步骤1:拷贝范围的参数计算:
首先根据拷贝坐标和宽高计算原始拷贝终点坐标;
如果拷贝终点坐标大于缓冲区,计算拷贝终点坐标以及计算实际需要拷贝缓冲区的宽高,及超过缓冲区上边界的高度;否则,拷贝终点坐标与原始拷贝终点坐标相同,实际需要拷贝缓冲区的宽高与输入的宽高相同,超过缓冲区上边界的高度设置为0。
如果拷贝坐标小于缓冲区,设置超出缓冲区左边界或下边界的拷贝起点坐标为0,当拷贝终点坐标小于缓冲区右边界或上边界时,正方向拷贝长度为0,负方向拷贝长度为输入拷贝长度;否则正方向拷贝长度为拷贝终点坐标,负方向拷贝长度为拷贝起点坐标的绝对值。
如果拷贝坐标不小于缓冲区,拷贝起点坐标与拷贝坐标相同,正方向拷贝长度为输入拷贝长度;负方向拷贝长度为0;
再判断正方向拷贝长度,如果等于0,那么终点坐标为0;否则,根据拷贝终点坐标计算终点坐标。
再根据拷贝起点坐标和终点坐标计算拷贝起点和终点的tile坐标,根据起点和终点tile坐标计算x和y的正方向拷贝的tile个数,根据y的负方向长度计算y方向负的拷贝tile个数,以及y方向总共拷贝的tile个数;
最后初始化tile行的起始行为0,结束行为4。
其中,tile表示4x4像素块,tile行表示4个像素行;
设定缓冲区的左下角坐标(x,y)为原点;
步骤2:y方向拷贝像素的处理:
2.1)拷贝超出缓冲区下边界的像素:
y的负方向拷贝tile个数就是超出缓冲区下边界的需要拷贝的tile行个数,并且这些tile不需要经过拷贝过程,直接给0,
对于第一个tile行需要根据y的负方向拷贝长度计算tile行的起始位置,其他情况tile行的起始位置都是0,结束位置都是4;
2.2)拷贝缓冲区内的像素:
根据拷贝起点tile坐标和x的正方向拷贝的tile个数计算拷贝缓冲区内的tile坐标,根据tile坐标从缓冲区读tile行像素;
2.3)拷贝超出缓冲区上边界的像素:
这些tile同样不需要经过拷贝过程,直接给0,tile行的开始位置都是0,对于最后一个tile行,tile行的结束位置根据超过缓冲区上边界的距离计算,其他tile行的结束位置都是4;
步骤3:x方向拷贝像素的处理:
处理高度方向在缓冲区内的tile行像素,在读取的像素行前保留x方向负的拷贝长度,这些像素全部用0填充;
对于缓冲区拷贝的第一个tile行,tile行的起始位置为0,根据拷贝起点坐标计算tile行的起始位置;
再根据拷贝起点坐标和y的正方向拷贝长度计算tile行的结束位置。
步骤4:tile行像素处理:
将拷贝的tile行像素进入OpenGL定义的图像管线,当tile行像素完成管线处理后重新转入步骤2)开始下一个tile行像素的读取;
当全部tile行处理完成后,基于OpenGL拷贝命令的GPU拷贝缓冲区结束。
Claims (5)
1.一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,其特征在于:所述方法包括如下步骤:
1)拷贝范围的参数计算:
2)y方向拷贝像素的处理:
3)x方向拷贝像素的处理:
4)tile行像素处理:
其中,tile表示4x4像素块,最左下角像素的x,y坐标均为4的整数倍,
tile行表示4个像素行,起始像素行的y坐标是4的整数倍。
2.根据权利要求1所述的基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,其特征在于:所述步骤1)为:
根据输入的拷贝坐标和宽高计算超过缓冲区上边界的高度,x和y的正负方向拷贝长度、拷贝起点坐标、拷贝起点tile坐标,以及x和y的正方向拷贝的tile个数;
根据y的负方向拷贝长度计算y的负方向拷贝tile个数,以及y方向总共拷贝的tile个数;
其中,设定缓冲区的左下角坐标(x,y)为原点。
3.根据权利要求1所述的基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,其特征在于:所述步骤2)包括:
2.1)拷贝超出缓冲区下边界的像素:
y的负方向拷贝tile个数就是超出缓冲区下边界的需要拷贝的tile行个数,并且这些tile不需要经过拷贝过程,直接给0,
对于第一个tile行需要根据y的负方向拷贝长度计算tile行的起始位置,其他情况tile行的起始位置都是0,结束位置都是4;
2.2)拷贝缓冲区内的像素:
根据拷贝起点tile坐标和x的正方向拷贝的tile个数计算拷贝缓冲区内的tile坐标,根据tile坐标从缓冲区读tile行像素;
2.3)拷贝超出缓冲区上边界的像素:
这些tile同样不需要经过拷贝过程,直接给0,tile行的开始位置都是0,对于最后一个tile行,tile行的结束位置根据超过缓冲区上边界的距离计算,其他tile行的结束位置都是4。
4.根据权利要求1所述的基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,其特征在于:所述步骤3)为:
处理高度方向在缓冲区内的tile行像素,在读取的像素行前保留x方向负的拷贝长度,这些像素全部用0填充;
对于缓冲区拷贝的第一个tile行,tile行的起始位置为0,根据拷贝起点坐标计算tile行的起始位置;
再根据拷贝起点坐标和y的正方向拷贝长度计算tile行的结束位置。
5.根据权利要求1所述的基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法,其特征在于:所述步骤4)为:
将拷贝的tile行像素进入OpenGL定义的图像管线,当tile行像素完成管线处理后重新转入步骤2)开始下一个tile行像素的读取;
当全部tile行处理完成后,基于OpenGL拷贝命令的GPU拷贝缓冲区结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911125908.4A CN111047501B (zh) | 2019-11-18 | 2019-11-18 | 一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911125908.4A CN111047501B (zh) | 2019-11-18 | 2019-11-18 | 一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111047501A true CN111047501A (zh) | 2020-04-21 |
CN111047501B CN111047501B (zh) | 2023-06-13 |
Family
ID=70232911
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911125908.4A Active CN111047501B (zh) | 2019-11-18 | 2019-11-18 | 一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111047501B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08272543A (ja) * | 1995-03-30 | 1996-10-18 | Hitachi Software Eng Co Ltd | 2バッファ間のデータ複写方法 |
JP2003099243A (ja) * | 2001-09-21 | 2003-04-04 | Sharp Corp | グラフィック表示装置およびその制御方法 |
CN101996390A (zh) * | 2010-10-20 | 2011-03-30 | 中兴通讯股份有限公司 | 一种图像拷贝的方法和装置 |
US20170358109A1 (en) * | 2016-06-10 | 2017-12-14 | Apple Inc. | Accelerated Blits of Multisampled Textures on GPUs |
-
2019
- 2019-11-18 CN CN201911125908.4A patent/CN111047501B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08272543A (ja) * | 1995-03-30 | 1996-10-18 | Hitachi Software Eng Co Ltd | 2バッファ間のデータ複写方法 |
JP2003099243A (ja) * | 2001-09-21 | 2003-04-04 | Sharp Corp | グラフィック表示装置およびその制御方法 |
CN101996390A (zh) * | 2010-10-20 | 2011-03-30 | 中兴通讯股份有限公司 | 一种图像拷贝的方法和装置 |
US20170358109A1 (en) * | 2016-06-10 | 2017-12-14 | Apple Inc. | Accelerated Blits of Multisampled Textures on GPUs |
Non-Patent Citations (1)
Title |
---|
张德好;刘青昆;: "一种Cholesky分解重叠算法" * |
Also Published As
Publication number | Publication date |
---|---|
CN111047501B (zh) | 2023-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7175197B2 (ja) | 画像処理方法および装置、記憶媒体、コンピュータ装置 | |
US8379058B2 (en) | Methods and apparatuses to arbitrarily transform windows | |
CN109785417B (zh) | 一种实现OpenGL累积操作的方法及装置 | |
KR20160051154A (ko) | 렌더링 방법, 렌더링 장치 및 전자 장치 | |
CN109767479B (zh) | 一种基于动态边界组序列的图元填充方法和系统 | |
US20180150720A1 (en) | Locating features in warped images | |
CN111047501B (zh) | 一种基于OpenGL拷贝命令的GPU拷贝缓冲区的实现方法 | |
CN108280801B (zh) | 基于双线性插值的重映射方法、装置和可编程逻辑器件 | |
US10380722B2 (en) | Editing a graphic object in a vector representation to improve crisp property in raster representation | |
CN110942418B (zh) | 一种基于glCopyPixels的GPU像素复制方法 | |
JPWO2019041842A5 (zh) | ||
CN111047498B (zh) | 一种面向gpu硬件拷贝缓冲区算法的tlm微结构 | |
CN110992462A (zh) | 一种基于边缘计算3d模拟场景图像的批处理绘制方法 | |
CN116468632A (zh) | 一种基于自适应特征保持的网格去噪方法及装置 | |
CN114741188A (zh) | 图形元素处理方法、装置、电子设备及存储介质 | |
CN110969567B (zh) | 一种gpu线图元光栅化平移坐标系扫描方法 | |
CN111028140B (zh) | 一种gpu像素矩形缩放翻转的实现方法 | |
CN109658324B (zh) | 一种三角形光栅化扫描方法 | |
CN111028314B (zh) | 一种GPU产生Mipmap多重细节层纹理方法 | |
CN112750191B (zh) | 一种实时渲染中软阴影的制作方法 | |
CN111028127B (zh) | 一种gpu子纹理替换存储方法 | |
CN104850233B (zh) | 一种图像处理方法 | |
US20080143710A1 (en) | Method for image rendering | |
CN117689790B (zh) | 基于缓冲区的像素渲染保序方法、系统及存储介质 | |
CN112581352B (zh) | 一种面向多gpu的高性能图元分屏光栅方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |