GPU中各种测试功能分类
GPU简介

一、GPGPU的定义与原理GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。
GPU计算或GPGPU 就是利用图形处理器(GPU)来进行通用科学与工程计算。
GPU专用于解决可表示为数据并行计算的问题——在许多数据元素上并行执行的程序,具有极高的计算密度(数学运算与存储器运算的比率)。
GPU计算的模式是,在异构协同处理计算模型中将CPU与GPU结合起来加以利用。
应用程序的串行部分在CPU上运行,而计算任务繁重的部分则由GPU来加速。
从用户的角度来看,应用程序只是运行得更快了。
因为应用程序利用了GPU的高性能来提升性能。
在过去几年里,GPU的浮点性能已经上升到Teraflop级的水平。
GPGPU的成功使CUDA 并行编程模型相关的编程工作变得十分轻松。
在这种编程模型中,应用程序开发者可修改他们的应用程序以找出计算量繁重的程序内核,将其映射到GPU上,让GPU来处理它们。
应用程序的剩余部分仍然交由CPU处理。
想要将某些功能映射到GPU上,需要开发者重新编写该功能,在编程中采用并行机制,加入“C”语言关键字以便与GPU之间交换数据。
开发者的任务是同时启动数以万计的线程。
GPU硬件可以管理线程和进行线程调度。
英伟达™ Tesla(NVIDIA® Tesla)20系列GPU基于“Fermi”架构,这是最新的英伟达™ CUDA(NVIDIA® CUDA)架构。
Fermi专为科学应用程序而进行了优化、具备诸多重要特性,其中包括:支持500 gigaflop以上的IEEE标准双精度浮点硬件、一级和二级高速缓存、ECC存储器错误保护、本地用户管理的数据高速缓存(其形式为分布于整个GPU中的共享存储器)以及合并存储器访问等等。
"GPU(图形处理器)已经发展到了颇为成熟的阶段,可轻松执行实际应用程序并且其运行速度已远远超过了使用多核系统时的速度。
未来计算架构将是并行核心GPU与多核CPU串联运行的混合型系统。
gpu关系的指标

gpu关系的指标【原创版】目录1.GPU 的基本概念2.GPU 关系的指标3.常用 GPU 关系指标及其含义4.GPU 关系的指标如何选择5.总结正文一、GPU 的基本概念GPU,全称为 Graphics Processing Unit,即图形处理单元,是一种专门用于处理图形和图像任务的硬件设备。
GPU 在现代计算机中扮演着越来越重要的角色,除了用于图形渲染外,还广泛应用于科学计算、深度学习等领域。
二、GPU 关系的指标在讨论 GPU 性能时,通常会涉及到一些关系指标。
这些指标可以帮助我们更好地了解 GPU 的性能和特点,从而更有针对性地进行优化和选择。
三、常用 GPU 关系指标及其含义1.浮点运算能力:GPU 的浮点运算能力是衡量其性能的一个重要指标。
通常情况下,浮点运算能力越高,GPU 的性能越强。
2.显存容量:显存容量是指 GPU 内部用于存储数据的内存容量。
显存容量越大,GPU 可以处理的数据量就越多,性能也会相对更强。
3.显存带宽:显存带宽是指 GPU 与显存之间的数据传输速率。
显存带宽越高,GPU 可以更快地从显存中读取和写入数据,从而提高性能。
4.纹理单元:纹理单元是指 GPU 中用于处理纹理的专用单元。
纹理单元数量越多,GPU 处理纹理的能力越强,对图像渲染质量的提升也越明显。
5.核心频率:核心频率是指 GPU 的工作频率。
核心频率越高,GPU 的运算速度就越快,性能也会相对更强。
四、GPU 关系的指标如何选择在选择 GPU 时,我们需要根据实际需求来选择合适的关系指标。
例如,如果您需要进行大量的浮点运算,那么选择浮点运算能力较高的 GPU 会更合适。
如果您需要处理大量的纹理,那么选择纹理单元较多的 GPU 会更合适。
五、总结了解 GPU 关系的指标有助于我们更好地选择和使用 GPU。
在选择GPU 时,我们需要根据实际需求和预算来权衡各个关系指标,从而选择最适合自己的 GPU。
Photoshop CS4 中的 GPU 和 OpenGL 功能及限制

以下是由GPU 加速的Photoshop CS4 和Bridge CS 4 功能的列表。
要了解这些功能的详细信息, 请参阅“GPU accelerated features in Photoshop and Bridge CS4”(TechNotekb405745*)。
Adobe Photoshop CS4 中的OpenGL/GPU 功能包括:∙任意缩放级别的平滑显示∙带动画效果的缩放工具∙执行一步缩放时的动画过渡∙手掷图像∙鸟瞰视图∙旋转画布∙非方形像素图的平滑显示∙像素网格∙移动色彩匹配G P U∙通过G P U绘制画笔尖编辑反馈∙3D G P U功能包括:3D加速∙3D轴∙3D光源W i d g e t∙通过直接显示加速3D交互Bridge CS4 中的GPU 功能包括:∙预览面板∙全屏预览∙幻灯片放映∙“审阅”模式返回页首支持的GPU 和操作系统已经过测试的Photoshop CS4 支持的显卡列在“List of tested graphics display cards in Photoshop CS4” (TechNote kb405711*) 中。
注意: 即使显卡上有多个GPU, Photoshop CS4 也只使用其中一个GPU。
操作系统GPU 支持和限制:操作系统GPU 支持和限制Mac OS PPC 当计算机使用支持的显卡、“启用OpenGL 绘图”可用且已在“Photoshop”>“首选项”>“性能” (Mac OS) 或“编辑”>“首选项”>“性能” (Windows) 中选定时, Photoshop即可在PowerPC 上支持OpenGL 功能, 其中包括: 任意缩放级别的平滑显示、鸟瞰视图、旋转画布、通过GPU 绘制画笔笔尖编辑反馈以及手掷图像。
即使具有支持的显卡, PowerPC 上也不支持高级绘图功能。
高级设置中的“高级绘图”选项不可用时, Photoshop 将停用“移动色彩匹配GPU”、3D GPU 功能以及大小一致的棋盘复合。
常见性能测试分类及测试目的、测试方法

常见的性能测试方法介绍今天我们一起来聊聊性能测试,那首先我们说说什么是性能呢?性能是应用程序的一种特性,其包括了时间特性和资源特性。
时间特性是指系统反应快慢,持续稳定运行时间长短;资源特性是指在进行性能测试过程中,系统资源的消耗情况,常见的系统资源包括处理器(CPU)、内存(memory)、磁盘(disk)等。
那什么是性能测试呢?关于性能测试没有一个统一的定义,不同人对性能测试有不同的理解,因此不同人对性能测试的概念也有不同的看法。
经过查阅资料和自身理解,我认为性能测试是借助性能测试功能模拟用户并发操作,检查系统性能是否满足客户要求,系统是否存在性能瓶颈,进一步定位瓶颈问题,最终使系统性能满足要求,系统资源使用达到最优的结果。
接下来是今天的重点问题,性能测试有哪些类型,它们的测试目的、方法是怎样的呢?性能测试大致分为以下六类:1.验收性能测试:通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。
目的:验收系统性能是否满足需求。
方法:按照性能需求设置对应的用户并发数,观察各项指标是否满足需求。
2.负载测试:有时又叫可置性测试。
在被测系统上不断增加压力,直到性能指标超过预定指标或者某种资源使用已经达到饱和状态。
目的:找到系统处理能力的极限。
方法:不断增加虚拟用户来不断给系统增加压力,直到系统中部分资源达到饱和。
3.压力测试:测试系统在一定饱和状态下,例如CPU、内存等在饱和使用情况下,系统能够处理会话的能力,以及系统是否回出现错误。
目的:测试系统在一定饱和状态时,系统处理业务的能力。
方法:不断增加虚拟用户数来不断给系统增加压力,直到系统中部分资源达到饱和,持续运行一段时间,看系统是否会出错。
4.配置测试:通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。
一般用于性能调优。
目的:通过调整环境了解不同因素对系统性能的影响情况,从而找到调优的方法。
显卡测试软件GPU-Z使

显卡测试软件GPU-Z使用详解
其他: 其他:SLI或ATI Crossfire:显示是否开启 或 : SLI或者交火,这个选项,在笔记本领域,也 许只有对于Dell XPS 1730来说才会有意义吧。
SLI技术
SLI技术就是通过串接两张PCI Express界面显卡,然后通过两张显卡的协同工作 来提升整个系统的显示效能。 SLI技术就是将两张搭载nVIDIA绘图芯片的显卡同时插入主板PCI-EX16的两个 插槽,然后用一张SLI连接卡连接起来,这种连接卡在两张显卡之间传输数字信 号,显卡处理完的帧数据被集合起来处理,然后作为一个整体信号被输出。为了 保证两张显卡的任务分工和协同工作,nVIDIA将SLI控制功能直接集成在GPU芯 片内部,那么芯片就负责显卡的连接和协同工作,它将任务分派给两块显卡渲染 处理,然后将处理结果收集起来,经过自己的运算和重新合成,输出完整高效的 图形画面 当然,两块显卡并不是同等工作,其中一块显卡做为主卡,另一款做为副卡,其 中副卡只是接收来自主卡的任务进行相关处理,然后将结果传关回主卡,两块显 卡都是通过PCI-E接口与主板相连接,而这两块显卡之间还要有一个通讯的PCB 卡(即SLi桥接卡)。也就是说,被处理的数据来源是通过PCI-E插槽从主板获 得,而处理过显存容量/Memory Size:此处显示显卡板载的物理显存容量。 显存容量 : 显存带宽/Bandwidth:此处显示GPU-Z与显存之间的数据传输速度, 显存带宽 : 越多性能越强。 驱动部分: ⑥.驱动部分: 驱动部分 驱动程序版本/Driver Version:此处为系统内当前使用的显卡驱动 驱动程序版本 : 的版本号。 显卡频率部分: ⑦.显卡频率部分: 显卡频率部分 核心频率/GPU Clock:显示GPU当前的运行频率。 核心频率 : 显存/Memory:显示显存当前的运行频率。 显存 : Shader/Shader:显示着色单元当前的运行频率。 : 原始核心频率/Default Clock:显示GPU默认的运行频率。 原始核心频率 : 原始)内存/Memory:显示显存默认的运行频率。 (原始)内存 : 原始) (原始)Shader/Shader:显示着色单元默认的运行频率。 :
软件性能测试包含哪些测试类型?权威第三方软件测评中心分享

软件性能测试包含哪些测试类型?权威第三方软件测评中心分享性能测试是体现软件产品质量的重要因素,它是一种非功能性,不关心系统是否可以完成某项功能,只关心软件系统在运行时的速度是否快,是否消耗足够少的资源。
是测试人员通过自动化测试工具来模拟多种正常、峰值及异常情况下对系统的各项性能指标进行测试。
一、软件性能测试包含哪些测试类型?性能测试是一个统称,包含了多种测试类型,主要有负载测试、压力测试、并发测试、配置测试等1.负载测试通过在被测系统中不断增加压力,直到达到性能指标极限要求。
主要目的是找到特定的环境下系统处理能力的极限。
2.压力测试通过对软件系统不断施加压力,识别系统性能拐点,从而获得系统提供的最大服务界别的测试活动,主要目的是检查系统处于压力情况下的表现。
3.并发测试指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。
主要目的并非是为了获得性能指标,而是为了发现引起的问题。
4.配置测试主要是对被测试系统的软硬件配置进行的测试,找到系统各项资源的最优分配原则。
配置测试能充分利用有限的软硬件资源,发挥系统的最佳处理能力。
5.容量测试通过运行一种或者多种业务场景,测试在一定量级的数据量下的性能情况。
6.稳定性测试指给系统增加一定负载,使系统持续运行一段时间,测试系统是否稳定,是否存在内存溢出等问题。
二、权威第三方软件测评中心分享卓码软件测评,专业的第三方软件测评中心,具备CMA、CNAS资质认证。
专注于软件测试服务行业多年,测试团队经验丰富,技术成熟,价格优惠,服务周到,服务范围覆盖全国各地,各类软件测试类型线上线下均可进行,出具客观公正的软件测试报告。
软件测试中常见的测试类型

软件测试中常见的测试类型在软件测试中,各种测试类型被广泛应用,以确保软件的质量和可靠性。
本文将介绍一些常见的软件测试类型,包括黑盒测试、白盒测试、灰盒测试、功能测试、性能测试、安全测试、兼容性测试和用户界面测试。
黑盒测试是一种测试方法,测试人员对软件系统进行测试,而无需了解其内部结构和实现细节。
黑盒测试注重测试系统的功能和输入输出之间的关系,以揭示系统是否按照规格要求进行操作。
白盒测试是一种测试方法,测试人员具备对软件系统的内部结构和实现细节的了解。
白盒测试通过检查代码的逻辑路径和覆盖率来评估系统的质量和可靠性。
灰盒测试结合了黑盒测试和白盒测试的特点。
测试人员部分了解系统的内部结构和实现细节,以更全面地评估软件系统的功能和质量。
功能测试是一种测试方法,测试人员验证软件系统的功能是否满足规格要求。
这种测试类型关注系统的功能是否正确、完整和可用。
性能测试用于评估软件系统在各种负载情况下的性能表现。
测试人员主要关注系统的响应时间、吞吐量、资源利用和稳定性。
安全测试旨在评估软件系统的安全性,以揭示潜在的安全漏洞和弱点。
测试人员通过模拟攻击和测试系统的防护机制来评估系统的安全性。
兼容性测试用于验证软件系统在不同平台、操作系统、浏览器和设备上的兼容性。
测试人员着重测试系统在各种环境下的稳定性和一致性。
用户界面测试是一种测试方法,测试人员验证软件系统的用户界面是否符合用户需求和期望。
测试人员关注系统的易用性、可理解性和可访问性。
结论:软件测试中的常见测试类型包括黑盒测试、白盒测试、灰盒测试、功能测试、性能测试、安全测试、兼容性测试和用户界面测试。
每个测试类型都有其独特的目的和方法,以确保软件系统的质量和可靠性。
在进行软件测试时,测试人员可以根据具体需求选择适当的测试类型,并结合多种测试方法进行综合评估,以获得可靠的测试结果。
电脑硬件性能测试指南如何评估硬件的性能

电脑硬件性能测试指南如何评估硬件的性能电脑硬件性能测试指南:如何评估硬件的性能在现代科技发展的今天,电脑硬件性能对于用户的体验至关重要。
无论是日常使用还是进行专业任务,了解如何评估电脑硬件的性能对于选择合适的设备具有重要意义。
本文将为您介绍一些常见的电脑硬件性能测试指南,帮助您全面了解如何准确评估硬件的性能。
一、中央处理器(CPU)性能测试中央处理器(CPU)是电脑的核心组件之一,负责执行所有运算和计算任务。
评估CPU的性能对于判断电脑整体性能至关重要。
以下是一些常见的CPU性能测试指南:1. 常用测试工具:在评估CPU性能时,我们可以使用一些常见的测试工具,例如Cinebench、PassMark等。
这些工具可以进行多项CPU性能测试,包括单核性能、多核性能等。
通过对比测试结果,可以更直观地了解CPU的性能表现。
2. 考虑核心数和处理器频率:在选择CPU时,我们需要关注其核心数和处理器频率。
核心数越多,意味着整体运算能力越强;处理器频率越高,意味着单个核心的运算能力越强。
综合考虑这两个因素可以更好地评估CPU的性能水平。
二、图形处理器(GPU)性能测试图形处理器(GPU)在处理图形和显像相关任务时发挥着至关重要的作用,尤其是在游戏和设计领域。
以下是一些常见的GPU性能测试指南:1. 常用测试工具:与CPU性能测试类似,我们可以使用一些常见的测试工具,例如3DMark、FurMark等,来评估GPU的性能。
这些工具可以进行图形渲染和计算任务,检测GPU的性能水平。
2. 考虑显存容量和核心频率:在选择GPU时,我们需要关注其显存容量和核心频率。
显存容量越大,意味着可以处理更大规模的图像,提供更顺畅的游戏或设计体验;核心频率越高,意味着单个核心的计算能力越强。
综合考虑这两个因素可以更好地评估GPU的性能水平。
三、存储设备性能测试存储设备对于电脑的响应速度和数据读写能力有着直接影响。
以下是一些常见的存储设备性能测试指南:1. 常用测试工具:评估存储设备性能时,我们可以使用一些常见的测试工具,例如CrystalDiskMark、ATTO Disk Benchmark等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
来,即使我们先绘制比较近的物体,再绘制比较远的物体,则远的物体也不会覆盖近的物体了。
实际上,只要存在深度缓冲区,无论是否启用深度测试,OpenGL在像素被绘制时都会尝试将深度数据写入到缓冲区内,除非调用了glDepthMask(GL_FALSE)来禁止写入。
这些深度数据除了用于常规的测试外,还可以有一些有趣的用途,比如绘制阴影等等。
除了深度测试,OpenGL还提供了剪裁测试、Alpha测试和模板测试。
1、剪裁测试剪裁测试用于限制绘制区域。
我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃。
换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改。
有的朋友可能玩过《魔兽争霸3》这款游戏。
游戏时如果选中一个士兵,则画面下方的一个方框内就会出现该士兵的头像。
为了保证该头像无论如何绘制都不会越界而覆盖到外面的像素,就可以使用剪裁测试。
可以通过下面的代码来启用或禁用剪裁测试:glEnable(GL_SCISSOR_TEST); // 启用剪裁测试glDisable(GL_SCISSOR_TEST); // 禁用剪裁测试可以通过下面的代码来指定一个位置在(x, y),宽度为width,高度为height的剪裁窗口。
glScissor(x, y, width, height);注意,OpenGL窗口坐标是以左下角为(0, 0),右上角为(width, height)的,这与Windows 系统窗口有所不同。
还有一种方法可以保证像素只绘制到某一个特定的矩形区域内,这就是视口变换(在第五课第3节中有介绍)。
但视口变换和剪裁测试是不同的。
视口变换是将所有内容缩放到合适的大小后,放到一个矩形的区域内;而剪裁测试不会进行缩放,超出矩形范围的像素直接忽略掉。
2、Alpha测试在前面的课程中,我们知道像素的Alpha值可以用于混合操作。
其实Alpha值还有一个用途,这就是Alpha测试。
当每个像素即将绘制时,如果启动了Alpha测试,OpenGL会检查像素的Alpha值,只有Alpha值满足条件的像素才会进行绘制(严格的说,满足条件的像素会通过本项测试,进行下一种测试,只有所有测试都通过,才能进行绘制),不满足条件的则不进行绘制。
这个“条件”可以是:始终通过(默认情况)、始终不通过、大于设定值则通过、小于设定值则通过、等于设定值则通过、大于等于设定值则通过、小于等于设定值则通过、不等于设定值则通过。
如果我们需要绘制一幅图片,而这幅图片的某些部分又是透明的(想象一下,你先绘制一幅相片,然后绘制一个相框,则相框这幅图片有很多地方都是透明的,这样就可以透过相框看到下面的照片),这时可以使用Alpha测试。
将图片中所有需要透明的地方的Alpha值设置为0.0,不需要透明的地方Alpha值设置为1.0,然后设置Alpha测试的通过条件为:“大于0.5则通过”,这样便能达到目的。
当然也可以设置需要透明的地方Alpha值为1.0,不需要透明的地方Alpha值设置为0.0,然后设置条件为“小于0.5则通过”。
Alpha测试的设置方式往往不只一种,可以根据个人喜好和实际情况需要进行选择。
可以通过下面的代码来启用或禁用Alpha测试:glEnable(GL_ALPHA_TEST); // 启用Alpha测试glDisable(GL_ALPHA_TEST); // 禁用Alpha测试可以通过下面的代码来设置Alpha测试条件为“大于0.5则通过”:glAlphaFunc(GL_GREATER, 0.5f);该函数的第二个参数表示设定值,用于进行比较。
第一个参数是比较方式,除了GL_LESS(小于则通过)外,还可以选择:GL_ALWAYS(始终通过),GL_NEVER(始终不通过),GL_LESS(小于则通过),GL_LEQUAL(小于等于则通过),GL_EQUAL(等于则通过),GL_GEQUAL(大于等于则通过),GL_NOTEQUAL(不等于则通过)。
现在我们来看一个实际例子。
一幅照片图片,一幅相框图片,如何将它们组合在一起呢?为了简单起见,我们使用前面两课一直使用的24位BMP文件来作为图片格式。
(因为发布到网络上,为了节约容量,我所发布的是JPG格式。
大家下载后可以用Windows XP自带的画图工具打开,并另存为24位BMP格式)注:第一幅图片是著名网络游戏《魔兽世界》的一幅桌面背景,用在这里希望没有涉及版权问题。
如果有什么不妥,请及时指出,我会立即更换。
在24位的BMP文件格式中,BGR三种颜色各占8位,没有保存Alpha值,因此无法直接使用Alpha测试。
注意到相框那幅图片中,所有需要透明的位置都是白色,所以我们在程序中设置所有白色(或很接近白色)的像素Alpha值为0.0,设置其它像素Alpha值为1.0,然后设置Alpha测试的条件为“大于0.5则通过”即可。
这种使用某种特殊颜色来代表透明颜色的技术,有时又被成为Color Key技术。
利用前面第11课的一段代码,将图片读取为纹理,然后利用下面这个函数来设置“当前纹理”中每一个像素的Alpha值。
/* 将当前纹理BGR格式转换为BGRA格式* 纹理中像素的RGB值如果与指定rgb相差不超过absolute,则将Alpha设置为0.0,否则设置为1.0*/void texture_colorkey(GLubyte r, GLubyte g, GLubyte b, GLubyte absolute){GLint width, height;GLubyte* pixels = 0;// 获得纹理的大小信息glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);// 分配空间并获得纹理像素pixels = (GLubyte*)malloc(width*height*4);if( pixels == 0 )return;glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixel s);// 修改像素中的Alpha值// 其中pixels[i*4], pixels[i*4+1], pixels[i*4+2], pixels[i*4+3]// 分别表示第i个像素的蓝、绿、红、Alpha四种分量,0表示最小,255表示最大{GLint i;GLint count = width * height;for(i=0; i<count; ++i){if( abs(pixels[i*4] - b) <= absolute&& abs(pixels[i*4+1] - g) <= absolute&& abs(pixels[i*4+2] - r) <= absolute )pixels[i*4+3] = 0;elsepixels[i*4+3] = 255;}}// 将修改后的像素重新设置到纹理中,释放内存glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);free(pixels);}有了纹理后,我们开启纹理,指定合适的纹理坐标并绘制一个矩形,这样就可以在屏幕上将图片绘制出来。
我们先绘制相片的纹理,再绘制相框的纹理。
程序代码如下:void display(void){static int initialized = 0;static GLuint texWindow = 0;static GLuint texPicture = 0;// 执行初始化操作,包括:读取相片,读取相框,将相框由BGR颜色转换为BGRA,启用二维纹理if( !initialized ){texPicture = load_texture("pic.bmp");texWindow = load_texture("window.bmp");glBindTexture(GL_TEXTURE_2D, texWindow);texture_colorkey(255, 255, 255, 10);glEnable(GL_TEXTURE_2D);initialized = 1;}// 清除屏幕glClear(GL_COLOR_BUFFER_BIT);// 绘制相片,此时不需要进行Alpha测试,所有的像素都进行绘制glBindTexture(GL_TEXTURE_2D, texPicture);glDisable(GL_ALPHA_TEST);glBegin(GL_QUADS);glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);glEnd();// 绘制相框,此时进行Alpha测试,只绘制不透明部分的像素glBindTexture(GL_TEXTURE_2D, texWindow);glEnable(GL_ALPHA_TEST);glAlphaFunc(GL_GREATER, 0.5f);glBegin(GL_QUADS);glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);glEnd();// 交换缓冲glutSwapBuffers();}其中:load_texture函数是从第11课中照搬过来的(该函数还使用了一个power_of_two函数,一个BMP_Header_Length常数,同样照搬),无需进行修改。
main函数跟其它课程的基本相同,不再重复。
程序运行后,会发现相框与相片的衔接有些不自然,这是因为相框某些边缘部分虽然肉眼看上去是白色,但其实RGB值与纯白色相差并不少,因此程序计算其Alpha值时认为其不需要透明。