directx12 3d开发过程中出现的报错 一

ops/2025/2/5 8:55:09/

报错:“&”要求左值

& 要求左值” 这个错误通常是因为你在尝试获取一个临时对象或者右值的地址,而 & 运算符只能用于左值(即可以放在赋值语句左边的表达式,代表一个可以被引用的内存位置)。

可能出现错误的位置及解决办法

1. 在创建交换链时传递指针

在调用 CreateSwapChainForHwnd 这类函数时,如果不小心传入了临时对象的地址,就会出现此错误。

错误示例

dxgiFactory->CreateSwapChainForHwnd(commandQueue, hwnd, &swapChainDesc, nullptr, nullptr, &(IDXGISwapChain1*)swapChain);

这里 (IDXGISwapChain1*)swapChain 是一个临时的类型转换结果,它不是一个左值,不能直接取地址。

解决办法
使用一个中间变量进行类型转换。

IDXGISwapChain1* tempSwapChain1 = nullptr;
if (SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(commandQueue, hwnd, &swapChainDesc, nullptr, nullptr, &tempSwapChain1))) {if (tempSwapChain1) {tempSwapChain1->QueryInterface(IID_PPV_ARGS(&swapChain));tempSwapChain1->Release();}
}
2. 在资源屏障操作中使用临时对象

在创建资源屏障时,如果使用了临时的资源屏障描述符而没有将其存储为左值,也会报错。

错误示例

commandList->ResourceBarrier(1, &D3D12_RESOURCE_BARRIER::Transition(vertexBuffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER));

这里 D3D12_RESOURCE_BARRIER::Transition 返回的是一个临时对象,不能直接取地址。

解决办法
先创建一个资源屏障对象,再取其地址。

D3D12_RESOURCE_BARRIER vertexBufferResourceBarrier = CD3DX12_RESOURCE_BARRIER::Transition(vertexBuffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
commandList->ResourceBarrier(1, &vertexBufferResourceBarrier);

http://www.ppmy.cn/ops/155821.html

相关文章

Java设计模式:行为型模式→状态模式

Java 状态模式详解 1. 定义 状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中,实现对象行为的动态改变。该模式的核心思想是分离不同状态…

【C++】C++11

前言 本篇博客我们来看看C11里发展了什么新的东西,跟C98比起来有什么不同 💓 个人主页:小张同学zkf ⏩ 文章专栏:C 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 ​ 目录 1.C11的发展历史 …

Baklib在知识管理领域的优势与五款竞争产品的全方位对比分析

内容概要 在现代企业环境中,知识管理的重要性愈发凸显。随着信息技术的快速发展和市场竞争的加剧,企业面临着海量数据和信息的管理挑战。因此,如何有效地集中和利用这些知识资源,就成为了企业提升竞争力的关键所在。Baklib作为一…

BUU13 [极客大挑战 2019]BabySQL 1

题目中过滤了or,需要使用万能密码的变形(将or替换成 || ) 登进去没什么用,我们直接在用户名中输入or,select,union,where,from等词语全被过滤了,那还玩个锤子 网上一搜需要使用双写绕过 我们输入1 || 11 order by 3 …

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外,大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙,固件无法达到目前最高版本7.6,这里以最常用的60E为例,演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多,文章分上、下…

宝塔面板端口转发其它端口至MySQL的3306

最近需要把服务器的MySQL服务开放给外网,但又希望公开给所有人。也不想用默认的3306端口。同时也不想改变MySQL的默认端口。 这时候最好的办法就是用一个不常用的端口来转发至3306上去。例如使用49306至3306,外网通过49306来访问,内网依然使用…

从通讯工具到 AI 助理,AI手机如何发展?

随着AI进军各行各业,全面AI化时代已经到来。手机,作为现代人类的“数字器官”之一,更是首当其冲地融入了这一变革浪潮之中。 2024年年初,OPPO联合IDC发布了《AI手机白皮书》,公布OPPO已迈向AI手机这一全新阶段。到如今…

《海丰县蔡氏简介》前言

《海丰县蔡氏简介》前言 蔡惠进主编 汕尾市海陆丰蔡姓祖先基本是福建人, 在宋朝时迁至海丰, 因受潮汕文化、 客家文化、 广府文化、 政治归属等系列因素影响, 形成了闽南人一 种新的文化, 既有传统的闽南文化, 又有潮汕…