c++ - 使用 SDL2 处理硬件纹理
问题描述
为什么我必须使用 SDL_LockTexture 和 SDL_UnlockTexture 来使用 SDL2 操作硬件纹理?我知道“STATIC”纹理访问和“STREAMING”纹理访问之间的区别,但我想我很困惑,因为我似乎记得使用“SDL_SetTextureColorMod”来调整“STATIC”纹理的颜色。那么,为什么有时我们必须锁定像素而有时却不需要呢?
解决方案
您必须锁定纹理才能修改其像素。SDL_SetTextureColorMod
不这样做,它只设置当纹理用于渲染时与像素颜色相乘的颜色。
为什么我必须使用 SDL_LockTexture 和 SDL_UnlockTexture 来操作硬件纹理?
“硬件纹理”是指纹理的像素存储在 VRAM 中,并且可以在渲染时由 GPU 直接访问。您不能直接修改 VRAM 内存。SDL_LockTexture
返回指向 CPU 可访问的缓冲区的指针,同时SDL_UnlockTexture
将此(修改的)缓冲区复制回 VRAM。
推荐阅读
- c - 解决了 fscanf 的 C 问题
- .net - 如何在 VS 2019 中修复“您正在调试 someproject.dll 的发布版本”并进行调试
- db2 - 在 DB2 for z/OS 中查看记录锁定详细信息
- java - OpenAPI Generator gradle 插件文件名输出
- python - 有没有办法创建一个同时运行 Python 和 Perl 脚本的可执行文件?
- javascript - 为什么从前端传递的 javascript Map() 对象为空?
- node.js - E11000 mongoDB 中多个唯一键的重复键错误
- python - 读取带有洗牌行的大型 csv 文件块以使用 ML 进行分类
- c# - Sonarqube 报告控制器操作的重复代码块
- c# - 如何从 MainWindow 调用 XAML 中的方法?