OpenGL像素格式

OpenGL像素默认像素存储格式 OpenGL的像素存储格式是有glPixedStore来设定的,默认情况下相邻两行的存储的位置是相差4的整数倍, 也就是一行的存储要用4的整数倍的字节,不够的情况下要补充。举例说明: 一个2*2的红色图片(用GL_UNSIGNED_BYTE来表示一个颜色通道)的默认存储格式为: (255,0,0),(255,0,0)_ _ (255,0,0),(255,0,0)_ _ 这里(255, 阅读详情

1.简介

前文中描述了OpenGL的图像格式,本文接着描述像素格式
图像格式可以理解为对GPU中数据的解释,那么对于CPU端(也就是内存中)的数据解释就是像素格式的内容。

像素数据一般会在CPU和GPU中进行传输,如果传输过程是从GPU到CPU一般称为压包(pack),从CPU到GPU的传输称为解包(unpack)

2. 像素传输的应用场景

在OpenGL中有许多函数会用到像素的传输,主要包括两类
1. 压包操作:

glReadpixels
glGetTexImage
  1. 解包操作:
glTexImage*
glTexSubImage*

3. 像素传输的参数

所有上面列举的像素传输类函数,都包含了一下三个参数,用来定义像素的格式,这三个参数如下:

GLenum format​, GLenum type​, void *data​

这三个参数中:
data:指向内存中数据的指针或者是缓冲区对象的偏移量(由GL_PIXEL_PACK_BUFFER、GL_PIXEL_UNNPACK_BUFFER是否有缓冲区对象绑定来决定data的含义是前者还是后者)
format和type:真正定义了在内存或者缓冲区中像素数据的格式

这两个参数在《OpenGL图像格式》中也有提到,只不过OpenGL图像格式把二者混合写在一起了。(例如GL_RGBA8I实际上通过解析它的format是RGBA,type是GL_SHORT)下面分别进行介绍。

3.1 像素格式 format

内存中的像素可以分为 颜色数据、深度数据、深度/模板数据、模板数据。颜色数据一般分为4个成分:R、G、B、A。深度和模板数据一般只有一个成分。深度/模板数据是混合了深度和模板的数据,包含两个成分。
format定义了一下的数据特性:
1. 像素中的数据类型(是颜色、深度、深度/模板、模板)
2. 每一个像素的成分顺序(是RGBA还是BGRA)
3. 对于颜色数据来说,是否需要转换为浮点类型传输
format的定义格式和它的描述

format描述数据类型
GL_DEPTH_COMPONENT深度数据浮点型
GL_STENCIL_INDEX模板数据浮点型
GL_DEPTH_STENCIL深度模板数据浮点型
GL_RED GL_GREEN GL_BLUE GL_RG GL_RGB GL_BGR GL_RGBA GL_BGRA颜色数据浮点型

默认上面的数据都是浮点类型的,如果对于内存中的整型数据使用了上述浮点类型的标签,那么这些内存中的整型数据会被解析为归一化的浮点类型。
如果真的想传输整型的数据,那么需要使用_INTEGER后缀。

3.2 像素数据类型 type

type定义了每一个成分所占用的字节数。有两种表示方式,一种是定义单一成分占用多少字节,另一种是定义所有成分占用总的字节数。

第一种方式

示例:

format   type
GL_RGBA  GL_UNSIGNED_BYTE
表示数据是颜色数据、成分是R\G\B\A,每个成分占用1个字节(8位)

其他可用的枚举包括

type枚举值占用的字节
GL_(UNSIGNED_)BYTE1字节
GL_(UNSIGNED_)SHORT2字节
GL_(UNSIGNED_)INT4字节
GL_HALF_FLOAT2字节
GL_FLOAT4字节
第二种方式

格式如下,将所有成分打包在一起:

GL_[base type​]_[size1​]_[size2​]_[size3​]_[size4​](_REV​)

例如:
GL_UNSIGNED_SHORT_5_6_5 (GL_UNSIGNED_SHORT的大小必须容纳下后面的5+6+5 = 16位)
_REV是可选的,如果定义了,那么解析的方向按format中定义的方式反向解析。

定义了format是GL_RGB,同时定义type是GL_UNSIGNED_SHORT_5_6_5_REV,那么在解析的时候等同于
定义format是GL_BGR type是GL_UNSIGNED_SHORT_5_6_5

4. 像素传输的控制

通过format和type定义了单一像素的数据格式,像素传输的是一整块的数据,因此数据的布局也非常重要,OpenGL通过glPixelStore定义了数据的布局格式,详细的内容可以参考另一篇文章的描述。OpenGL API 之 glPixelStore(2)

5. 格式转换

像素格式在传输中客户端(cpu内存中)的数据和OpenGL图像(纹理和帧缓冲区)中的数据必须保持一致。
一般来说客户端的数据可以是浮点类型(包含归一化的整型)或者整型。在客户端指定数据类型时,如果format指定的是_INTEGER,但是type指定的是浮点类型的值(如GL_FLOAT,GL_HALF_FLOAT),那么就会出现错误。同样如果客户端format指定的是_INTERGER,但是GPU端的图像格式指定的不是整型,那么传输也会失败。一般来说最好将两者指定的兼容,省去转换的麻烦。

参考文献: Pixel Transfer

车辆贷款违约预测挑战赛 2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost 阅读详情

相关推荐

TI AWR2944毫米波雷达开发板开箱:用官方Demo快速上手3D点云与热图生成

本文详细介绍了TI AWR2944毫米波雷达开发板的开箱与实战应用,包括硬件准备、软件开发环境搭建、Demo固件刷写与配置、实时可视化与数据解析等全流程指南。通过官方Demo快速上手3D点云与热图生成,帮助开发者高效掌握毫米波雷达技术在工业检测、智能交通等领域的应用。

weixin_42627853的博客 308

OpenGL ES 3.0 纹理格式介绍及有效的内部格式、格式、类型组合

一、简介 本文主要列举 OpenGL ES 3.0 中纹理格式有哪些,以及有效的内部格式、格式、类型组合。内容来自于 《OpenGL ES 3.0 编程指南 原书第2版》。 纹理格式主要应用于加载图像数据的相关接口,其中用于加载2D和立方图纹理的基本函数是 glTexImage2D,在 3.0 中还有多种替代方法指定 2D 纹理,如不可变纹理 glTexStorage2D 和 glTexSubIm...

阿飞的博客 1万+

基于FPGA低频方波测量-频率与占空比

基于FPGA低频方波测量-频率与占空比

DRAXY的博客 6733

OpenGL纹理贴图相关基本概念

1.纹理贴图之所以复杂是因为矩形的纹理数据需要被合理地映射到非矩形的区域上面,纹理就是数据的数组,例如颜色数据亮度数据alpha数据等,纹理的单个数据值 被叫做纹理元素 英文叫做texual,初学者会本能地把纹理当成二维图像,但是纹理也可以是一维和三维的数据。 2.纹理贴图的特点:在不进行纹理贴图时,每个图元的绘制或者使用一种颜色单调着色或者根据每个顶点的颜色插值着色。而纹理贴图则是允许把一副图

菜鸟进化史 8045

双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码)

​上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法,这篇博客将介绍使用yalmip的双层优化问题的求解方法。 1.KKT函数 通过调用yalmip工具箱中的KKT函数,可以直接求出优化问题的KKT条件,省去自己手动写的步骤。 2.solvebilevel函数 solvebilevel是yalmip工具箱内置的求解双层优化问题的函数。也就是通过这个函数,不需要咱手动写KKT条件,也不需要使用KKT函数,直接把上、下层优化的目标函数、约束条件往里面一放,就能求出结果。 ​

配电网和matlab的博客 1万+

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 511

OpenGL:纹理基本概念和参数

前言 在openGL使用纹理贴图时:发现很多关于纹理很多参数和概念不清楚先整理一下 原始图像数据 像素包装 图像数据在内存中很少以紧密包装的形式存在。在许多硬件平台上,处于性能上的考虑,一幅图像的每一行都应该从一种特定字节对齐地址开始。绝大多数编译器会自动把变量和缓冲区放置在一个针对该架构对齐优化的地址上。 例如一个包含3个分量的rgb图像,每个分量存储在一个字节中,如果图像有199个像素,那么一行需要597个像素。如果硬件本身的体系结构是4字节排列,那么图像每一行的末尾将由额外的3个...

aoxuestudy的专栏 2594

Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备

Ubuntu系统下MRIcroN、FSL6.05、Freesurfer7.1.1、MRtrix3、AFNI、ANTs的安装详解一、安装MRIcroN二、 FSL6.0.5完整安装与FSLeyes等Not Found修复Anaconda与虚拟环境(所有操作均在root下)获取最新版Anaconda3安装Anaconda3配置所有用户可用去掉恼人的base创建虚拟环境FSL与FSLeyes安装(所有操作均在root下)下载FSL安装FSL添加环境变量到/etc/bash.bashrc末尾 (ubuntu)或者

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 6085

GLES2 Graphic Engine Practice(四)框架升级 & 第二阶段的6个demo

1.       Input& Native-Activity         首先,先提一下Android的版本兼容。Android的兼容理论上很简单,Android有不同的Api level(比如2.2(8)是较早出现,4.2(17)是最近发布的)。一个运行的Android OS 是 2.3.4 (10)的手机可以跑10或是10以下的API写的程序,即是说即使你的程序支持的OS最高为8,在8

zhuo_peng_zhang的专栏 2482

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

Jet4505的博客 3168

DLMS/COSEM协议的理解体会

DLMS是通信协议,COSEM是电表建模规范。HDLC帧基本格式为0x7e......

一个bug是bug,多个bug能work 8312

OpenGL ES2.0/3.0 glTexImage2D 函数详解

OpenGL glTexImage2D 纹理生成函数注意点 glTexImage2D 详解 函数原型为:void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum

jeffasd的专栏 4万+

【腾讯小龙虾WorkBuddy专栏04】一文搞懂WorkBuddy的「专家」和「专家团」

WorkBuddy专家与专家团:专业级AI协作解决方案 WorkBuddy的专家(Expert)与专家团(Expert Team)功能颠覆了通用AI的局限性,提供角色化、可交付的专业服务。 核心优势 专家:深度垂直领域的AI顾问,具备人设、方法论、工具链,如全栈开发专家能直接交付完整项目,而非代码片段。 专家团:多智能体协作,自动拆解复杂任务(如竞品分析、全栈开发)并分发给对应角色,并行执行后整合输出,效率提升显著。 使用场景 单专家:解决专业问题(如SQL优化、UI设计)。

AI人人懂 2023

opengl像素格式

1.Windows下的调色板          OpenGL可以使用16色、256色、64K和16M真彩色。真彩模式下不需要调色板,而在16色模式下根本不可能得到较为满意的效果,因此对OpenGL而言,调色板只有在256色模式下才有意义。          我们知道,Windows把调色板分为系统调色板和逻辑调色板。每个应用程序都拥有一套自己的逻辑调色板(或使用缺省调色板),当该应用程序拥有键

happypretty的专栏 2589

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Windows中设置OpenGL像素格式的两种方法

indows使用OpenGL必须设置OpenGL环境,将窗口连接到OpenGL。首先选择并设置相应像素格式,然后创建着色描述表并将其连接到设备描述表。本文介绍两种设置OpenGL环境的方法,主要是选择像素格式方法的不同。HDC g_hDC = NULL;HGLRC g_hRC = NULL;#define METHOD_1BOOL ConnectGL1 (HWND hWnd);BOOL ConnectGL2 (HWND hWnd);          #ifdef METHOD_1#define Conne

poxiaozi6264的专栏 3847

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

openGL第四讲——像素格式管理

OpenGL基础技术讲座--像素格式管理1、Windows下的调色板OpenGL可以使用16色、256色、64K和16M真彩色。真彩模式下不需要调色板,而在16色模式下根本不可能得到较为满意的效果,因此对OpenGL而言,调色板只有在256色模式下才有意义。我们知道,Window

dx7128551的专栏 703

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

像素格式OpenGL

像素格式明确了OpenGL绘制平面的特性,如象素缓冲区是单缓冲还是双缓冲,数据是 RGBA方式还是Color Index方式等。每个OpenGL显示设备一般用名为PIXELFORMATDESCRIPTOR的结构来表示某个的像素格式,这个结构包含26个属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示:typedef struct tagPIXELFORMATDESCRIPT

1245

opengl像素格式和RC管理

http://hi.baidu.com/dem_simulation/item/7e45bc4086bb59a461d7b9c6 1.写在前面 由于OpenGL被设计成独立于硬件,独立于窗口系统,因此OpenGL的用户不需要考虑如何对计算机图形设备中的显示面(display surfaces)进行初始化和管理,这些工作交由操作系统帮助完成。虽然如此,任何想要使用好OpenGL的开发人员

T_W_S的专栏 3387

《高效学习OpenGL》之 openGL设置窗口像素格式

PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, // Version Number PFD_DRAW_TO_WINDOW | // Format Must Support

编辑编辑器 2716

OpenGL像素格式-PIXELFORMATDESCRIPTOR

像素格式明确了OpenGL绘制平面的特性,如象素缓冲区是单缓冲还是双缓冲,数据是 RGBA方式还是Color Index方式等。每个OpenGL显示设备一般用名为PIXELFORMATDESCRIPTOR的结构来表示某个的像素格式,这个结构包含26个属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示: typedef struct tagPIXELFORMATDESCRIP

Augusdi的专栏 3096

MFC和opengl像素格式

<br /> BOOL CMainWindow::SetMyPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pfs= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI|PFD_TYPE_RGBA, 24,0,0,0,0,0,0,0,0,0,0,0,0,0,PFD_

zhangrui83的专栏 938

Opengl RC(Render context,渲染下下文)与像素格式(转)

Opengl RC(Render context,渲染下下文)与像素格式(转)   2010-01-18 09:26:26|  分类: OpenGL |举报 |字号 订阅 原文链接:http://hi.baidu.com/atyuwen/blog/item/420d16ea7fdd36d5d539c9b6.html 1.Windows操作系统对OpenGL的支

lcjwxd的专栏 1322

opengl像素格式管理

1、Windows下的调色板OpenGL可以使用16色、256色、64K和16M真彩色。真彩模式下不需要调色板,而在16色模式下根本不可能得到较为满意的效果,因此对OpenGL而言,调色板只有在256色模式下才有意义。我们知道,Windows把调色板分为系统调色板和逻辑调色板。每个应用程序都拥有一套自己的逻辑调色板(或使用缺省调色板),当该应用程序拥有键盘输入焦点时可以最多使用从16M种色彩中选取...

weixin_30609287的博客 192
上一篇: OpenGL的基础光照和计算
下一篇: OpenGL API 之 glTexEnv
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值