最近想向纹理写入内容,谁知死活都有问题,先说一下我自己的思路:
1.在创建的时候写入内容:
int n = 512 * 512; UINT* textureData = new UINT[n]; for(int i = 0;i<n;) { textureData[i] = 0xFF0000FF; } ID3D11Texture2D* texture2D; D3D11_TEXTURE2D_DESC Desc; ZeroMemory( &Desc, sizeof( D3D11_TEXTURE2D_DESC ) ); Desc.Usage = D3D11_USAGE_DEFAULT; Desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; Desc.Width = 512; Desc.Height = 512; Desc.ArraySize = 1; Desc.MipLevels = 1; Desc.SampleDesc.Count = 1; D3D11_SUBRESOURCE_DATA data; data.pSysMem = textureData; data.SysMemPitch = 512*4;// 每一行的跨度,字节长度 data.SysMemSlicePitch = 0; // 深度 3D纹理有用 device->CreateTexture2D( &Desc, &data, &texture2D);
最先想到的肯定是这种方式,因为buffer就是在创建的时候传递值的,但是这种方式1D的纹理写入的时候是可以正常创建的,2D的就不行。想到之前学习后缓冲时的一个概念,跨度 != 宽度,或许可以是这样原因。如果不是,还请各位指正。
2.使用UpdateSubresource更新内容,从参数上来看,它对纹理的支持貌似比Map要好一点,Map写纹理的时候不知道怎么用。
void UpdateSubresource( [in] ID3D11Resource *pDstResource, [in] UINT DstSubresource, [in] const D3D11_BOX *pDstBox, // 这个用来描述,要覆盖目标的那个区域 [in] const void *pSrcData, // 数据源 [in] UINT SrcRowPitch, // 源的每行的跨度 [in] UINT SrcDepthPitch // 深度 );
从方法的参数来看,好像不用这个更新纹理的数据天理难容,但是写入的时候还是没有显示出正确的结果:
int rowPitch = 512*4; D3D11_BOX box; box.left = 0; box.top = 0; box.right = 512; box.bottom = 512; box.front = 0; box.back = 0; deviceContext->UpdateSubresource(texture2D,0,&box,textureData,rowPitch,0);
3.第三个就是使用D3DX11CreateTextureFromMemory和D3DX11CreateTextureFromResource来创建,也没有创建出来。
另外,使用
D3DX11SaveTextureToFile(deviceContext,texture2D,D3DX11_IFF_BMP,L"h001000.bmp");
这个方法把纹理输出出来,来进行判定内容是否更新正确的,不知道是不是TextureToFile针对不同的Format 对输出的图像格式有特殊要求。
相关推荐
它主要用于在纹理中写入文本。 假设你有一个角色会说些什么,你可能想把它放在一个纹理中并在你的角色上方显示。 Threex.dynamictexture 会让你很容易。 显示不告诉 []:它显示了这个功能,以及那个编码的功能。 ...
效果目的: Android平台 将 GL_TEXTURE_2D...6、将 步骤5 的Bitmap显示到ImageView上(用于验证纹理ID是否正常写入到Surface) 因实现流程较为复杂,技术难度要求较高,研究此案例代码花费时间较多,付费下载,谢谢。
体素针迹 将一组块纹理缝合到一个纹理图集中 纹理名称从和来自的纹理数据中。 例如,运行npm start或... debug :如果为 true,则将每个 mip 级别写入文档以进行调试。 方法: stitch() :从体素注册表中的所有块te
纹理创造者 ... 对于每个面板,可以使用顶部的“写入”按钮将纹理写入磁盘。 纹理被保存到Assets/Textures/ 。 如果在“加载”面板中创建了材质,则纹理将自动分配给该材质。 观看此视频以获取一些示例:
该软件包包含DirectXTex,这是一个共享的源库,用于读取和写入.DDS文件,并执行各种纹理内容处理操作,包括调整大小,格式转换,mip-map生成,Direct3D运行时纹理资源的块压缩以及与正常-地图转换。 该库使用Windows...
-output_file :应该将输出写入的路径。 -height :输出文件的高度,以像素为单位。 -width :输出文件的宽度,以像素为单位。 -k :内核大小; 必须是一个奇数整数。 -gpu :使用哪个GPU。 设置gpu >= 0将在...
Gohlke出色的代码,用于读取和写入图像数据。 其中的一个子集用于测试和演示目的。 SFTA模块实现了Alceu Costa在SIBGRAPI 2012的“纹理分形分析的高效算法”中提出的算法。 CHOG模块实现了Henrik Skibbe和Marco ...
要把相机渲染的当前画面当做贴图传递给shader,然后通过一张动态的noise贴图来采样这张纹理,最后输出到屏幕上。 每个相机都有一个render target,可以通过Camera.targetTexture来设置。如果这个目标为空那就是直接...
当把一个纹理附加到帧缓冲的时候,所有的渲染指令将会写入到这个纹理中,就想它是一个普通的颜色/深度或模板缓冲一样。使用纹理的优点是,所有渲染操作的结果将会被储存在一个纹理图像中,我们之后可以在着色器中很...
新的压缩预览窗格让您能够实时查看图像如何压缩,而无需进行磁盘写入。 目前最新版本还可支持HDR 纹理的 BC6 格式、适用于高质量压缩的 BC7 格式,以及在 Tegra GPU 上进行可扩展压缩的 ASTC 格式,省去纹理导入引擎...
vtex_c2tga 将编译的阀门纹理 (.vtex_c) 文件转换为 Targa (.tga) 文件。笔记仅处理以 DXT1、DXT5/DXT5_nm 和 RGBA 编码的 vtex 文件,因为这些是目前 Dota2 使用的唯一格式。依赖关系[ImageMagick] ( ) 用于读取 ...
OpenImageIO-强大的图像和纹理处理库,支持多种常见的有损和RAW格式自述文件OpenImageIO简介OIIO的主要目标受众是VFX工作室和工具开发人员,例如渲染器,合成器,查看器以及其他与图像相关的工具您可以在生产管道中...
将Camera数据显示到OpenGL ES渲染的图像中,并通过MediaCodeC 将 OpenGL ES 缓冲数据,硬编码写入到 mp4 视频文件中,完成视频的录制。 文件介绍请见: https://xiaxl.blog.csdn.net/article/details/72530314 ...
bmputil是一个CLI程序,用于处理不知道大小信息的原始RGB数据,例如在提取游戏纹理时。 bmputil可以自动检测此类无头数据流表示的图像的宽度,并以ImageMagick支持的任何图像格式(默认为.png )将格式化的图像写入...
案例2.2 在图像中写入文字 案例2.3 图像缩放与翻转 .案例2.4 图像的涂沫 案例2.5 百叶窗图像效果 案例2.6 图像的纹理和遮罩动画效果 案例2.7 图像的积木和浮雕效果 案例2.8 文字的360°旋转效果 案例2.9 ...
向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...
向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...
向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...
向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...