SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?

     2023-02-22     146

关键词:

【中文标题】SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?【英文标题】:What is the PIXELFORMATDESCRIPTOR parameter in SetPixelFormat() used for?SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做什么用的? 【发布时间】:2010-03-29 18:51:16 【问题描述】:

通常在设置 OpenGL 上下文时,我只需使用必要的信息填写 PIXELFORMATDESCRIPTOR 结构并调用 ChoosePixelFormat(),然后使用从 ChoosePixelFormat() 返回的匹配像素格式调用 SetPixelFormat()。然后我只是简单地传递了初始描述符,而没有考虑太多原因。

但现在我使用 wglChoosePixelFormatARB() 而不是 ChoosePixelFormat(),因为我需要一些扩展特性,例如 sRGB 和多重采样。它采用整数的属性列表,就像 Linux 上的 XLib/GLX 一样,而不是 PIXELFORMATDESCRIPTOR 结构。那么,我真的必须填写一个描述符供 SetPixelFormat() 使用吗?当 SetPixelFormat() 已经具有像素格式描述符索引时,它使用描述符做什么?为什么我必须在两个不同的地方指定相同的 pixelformat 属性?哪个优先; wglChoosePixelFormatARB() 的属性列表,还是传递给 SetPixelFormat() 的 PIXELFORMATDESCRIPTOR 属性?

为了让问题更清楚,这里是函数原型:

/* Finds a best match based on a PIXELFORMATDESCRIPTOR,
and returns the pixelformat index */
int ChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd);

/* Finds a best match based on an attribute list of integers and floats,
and returns a list of indices of matches, with the best matches at the head.
Also supports extended pixelformat traits like sRGB color space,
floating-point framebuffers and multisampling. */
BOOL wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
    const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats,
    UINT *nNumFormats
);

/* Sets the pixelformat based on the pixelformat index */
BOOL SetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd);

编辑:MSDN 谈到了 SetPixelFormat() 参数:

指向包含逻辑像素格式规范的 PIXELFORMATDESCRIPTOR 结构的指针。系统的元文件组件使用这种结构来记录逻辑像素格式规范。该结构对 SetPixelFormat 函数的行为没有其他影响。

但我不知道这意味着什么,也不知道它与我的问题有何关系。

【问题讨论】:

【参考方案1】:

我相信您不必使用 PIXELFORMATDESCRIPTOR 和 ChoosePixelFormat,只需使用 wglChoosePixelFormatARB 并将返回的 int 设置为像素格式。这些函数仅用于查询窗口以匹配像素格式,SetPixelFormat 函数不知道您使用哪个函数来获得所需的像素格式。

以下讨论的结论:

我研究了 Wine 的 opengl 实现,他们完全忽略了该参数.. (internal_SetPixelFormat),但谁知道 ms 用它做什么,我看到的唯一安全方法是使用 wglChoosePixelFormatARB 函数查找像素格式,然后使用DescribePixelFormat 填写您传递回 SetPixelFormat 的结构。

【讨论】:

是的,wglChoosePixelFormatARB 取代了 ChoosePixelFormat,毫无疑问。但是 SetPixelFormat 仍然需要一个 PIXELFORMATDESCRIPTOR。这就是我困惑的根源。所以你最终得到一个 PIXELFORMATDESCRIPTOR,一个你传递给 wglChoosePixelFormatARB 的整数属性列表。 抱歉,我错过了那个,那可能是它存储有关所选像素格式的信息的地方,您可以通过将其传递给归零结构来测试它。 不,它没有。该类型是指向 const PIXELFORMATDESCRIPTOR 的指针,因此它会读取它。它不写信给它。请参阅我的问题摘要中的函数原型。 您完全正确,我很抱歉没有花更多时间来理解您的问题。我现在也完全被这个参数弄糊涂了。当它应该已经知道有关pixelfomat的所有内容时,为什么还要在某个地方使用/存储结构。我研究了 Wine 的 opengl 实现,他们完全忽略了该参数.. tiny.cc/i11lj (internal_SetPixelFormat),但谁知道 ms 用它做什么,我看到的唯一安全方法是使用 wglChoosePixelFormatARB 函数找到像素格式,然后使用 DescribePixelFormat 来填写您传递回 SetPixelFormat 的结构。 抱歉,我不接受这个答案。你的回答很好,但我仍然对此感到困惑,也想给别人一个机会。我不完全相信使用 DescribePixelFormat 会起作用,因为 PIXELFORMATDESCRIPTOR 无法保存与 wglChoosePixelFormatARB 返回的某些像素格式相同的信息。

如何快速创建 Pixel_8 缓冲区

...ft中转换Objective-c代码,但我完全无法在快。这是Objective-c中的一个例子......它如何转换为swift?Pixel_8*buffer=(Pixel_8*)calloc(width*height,sizeof(Pixel_ 查看详情

在多行表单上关闭键盘 (Pixel2)

...2020-09-0518:09:37【问题描述】:弄乱了颤振,我必须在文档中的某个地方丢失它,因为我不确定这个对象或属性是什么。我正在尝试使用多行文本表单字段,因此我使用过处理焦点onTap:()FocusScope.of(context).requestFocus(newFocusNode()) 查看详情

GLSL 中“pixel_interlock_ordered”的语法是啥?

...时间】:2019-02-1511:07:12【问题描述】:我正在尝试OpenGL4.5中的ARB_fragment_shader_interlock扩展,但在尝试使用p 查看详情

Pixel 手机上的 checkLocationSettings 返回 RESOLUTION_REQUIRED

...1:25:15【问题描述】:我有三部Pixel手机,它们在检查片段中的位置权限时都会显示这种行为。当wifi关闭时,checkLocationSettings方法的r 查看详情

如何在我的 Pixel 3 平台构建中启用 Play 商店应用程序?

...载了Pixel3的AOSP平台源代码。我没有修改AOSP平台源代码树中的任何内容,只是执行了构建。花了大约12个 查看详情

C++ 中的指针错误

】C++中的指针错误【英文标题】:PointerErrorsinC++【发布时间】:2014-03-2001:35:38【问题描述】:我有一个std::vector类型,它在我的应用程序中保存指向对象的指针。声明如下:std::vector<PIXEL*>stgPixels;...其中PIXEL是在我的应用程序... 查看详情

Unity 2D 中 Pixel Perfect Camera 和 Cinemachine 的问题

...描述】:当我将2D像素完美的相机组件添加到相机和场景中的Cinemachine2D虚拟相机时,我遇到了问题,相机抖动。这是我对虚拟相机的配置这是我对像素完美相机组件的配置我在通用渲染 查看详情

OpenCV 距离变换中的像素索引

】OpenCV距离变换中的像素索引【英文标题】:Pixel-indexinginOpenCV\'sdistancetransform【发布时间】:2014-10-1709:05:41【问题描述】:我想使用函数distanceTransform()来查找非零像素到零像素的最小距离,以及最接近的零像素的位置。我调用... 查看详情

在 Pixel 2 和 Pixel 2 XL 接收 UDP 广播数据包

】在Pixel2和Pixel2XL接收UDP广播数据包【英文标题】:ReceivingUDPbroadcastpacketatPixel2andPixel2XL【发布时间】:2018-08-1215:39:57【问题描述】:我正在开发一个从Wi-Fi摄像头接收UPD广播数据包的应用。在我发现在GooglePixel2/Pixel2XL接收UPD广播... 查看详情

谷歌pixel2搭载安卓8.1系统10月4日首发

参考技术A自从去年谷歌推出了Pixel,似乎已经完全取代了Nexus,成为了谷歌的新宠。10月4日,首款搭载了安卓8.1系统的Pixel2就要与大家见面了。当然,除了首发的安卓8.1系统外,Pixel2还有许多值得我们注意的地方。今年我们将迎... 查看详情

swiftcgsize+pixel(代码片段)

查看详情

pixel4国内怎么更新

1、首先打开pixel手机的官网,进行登录。2、其次找到内核页面,点击打开。3、最后点击下载,下载最新版本即可。参考技术A你好,是可以更新的。基本上有两种方法可以更新您的GooglePixel。我们将介绍每种方法,显然第一种方... 查看详情

贝宝:pixel.gif - 我需要吗?

】贝宝:pixel.gif-我需要吗?【英文标题】:PayPal:pixel.gif-DoIneedit?【发布时间】:2012-08-3020:58:55【问题描述】:在我的PayPal按钮的末尾有这一行:<imgborder="0"src="https://www.paypalobjects.com/en_AU/i/scr/pixel.gif">这有点破坏了我设计的... 查看详情

您可以使用 JavaScript 检测 -moz-device-pixel-ratio 和 -o-device-pixel-ratio 的当前值吗?

】您可以使用JavaScript检测-moz-device-pixel-ratio和-o-device-pixel-ratio的当前值吗?【英文标题】:Canyoudetectthecurrentvaluefor-moz-device-pixel-ratioand-o-device-pixel-ratiousingJavaScript?【发布时间】:2011-12-1913:10:24【问题描述】:WebKit引入了-webkit-de 查看详情

pixel2搞机备份(代码片段)

title:pixel2搞机备份author:"edte"categories:["安卓"]date:2020-05-14刷机一时爽,忘记备份火葬厂今天手痒,一番瞎折腾,忘记备份了,结果无限卡fastboot,然后我一年多的数据就凉了,这是泪的教训。。。(哭设备系统:ArchLinu... 查看详情

pixel去除锁定图案

您好,Pixel手机的锁定图案可以通过以下步骤来去除:1.打开Pixel手机的设置界面,点击“安全”选项;2.在安全界面中,点击“屏幕锁定方式”;3.在屏幕锁定方式界面中,点击“无”;4.在弹出的确认框中,点击“确定”;5.在... 查看详情

仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像

...2018-04-2017:17:27【问题描述】:我正在尝试从我的应用程序中的cam拍摄照片,但它工作正常但无法在imageview中显示它会引发错误..请帮 查看详情

无法写入分区 Not Found (android, pixel 3)

】无法写入分区NotFound(android,pixel3)【英文标题】:FailedtowritetopartitionNotFound(android,pixel3)【发布时间】:2019-05-0204:24:41【问题描述】:我为闪烁像素3制作.img文件。构建完美完成。我想要闪光灯。当我像这样制作闪光灯时fastbootflash... 查看详情