`

动态向纹理写入内容

 
阅读更多

最近想向纹理写入内容,谁知死活都有问题,先说一下我自己的思路:
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:处理动态生成纹理的three.js助手

    它主要用于在纹理中写入文本。 假设你有一个角色会说些什么,你可能想把它放在一个纹理中并在你的角色上方显示。 Threex.dynamictexture 会让你很容易。 显示不告诉 []:它显示了这个功能,以及那个编码的功能。 ...

    Android平台OpenGLES3将GL-TEXTURE-2D纹理id渲染到ImageReader提供的Surface上

    效果目的: Android平台 将 GL_TEXTURE_2D...6、将 步骤5 的Bitmap显示到ImageView上(用于验证纹理ID是否正常写入到Surface) 因实现流程较为复杂,技术难度要求较高,研究此案例代码花费时间较多,付费下载,谢谢。

    voxel-stitch:将块纹理缝合到 rect-mip-map 的平铺贴图中

    体素针迹 将一组块纹理缝合到一个纹理图集中 纹理名称从和来自的纹理数据中。 例如,运行npm start或... debug :如果为 true,则将每个 mip 级别写入文档以进行调试。 方法: stitch() :从体素注册表中的所有块te

    Texture-Creator:统一的纹理创建工具

    纹理创造者 ... 对于每个面板,可以使用顶部的“写入”按钮将纹理写入磁盘。 纹理被保存到Assets/Textures/ 。 如果在“加载”面板中创建了材质,则纹理将自动分配给该材质。 观看此视频以获取一些示例:

    DirectXTex:DirectXTex纹理处理库

    该软件包包含DirectXTex,这是一个共享的源库,用于读取和写入.DDS文件,并执行各种纹理内容处理操作,包括调整大小,格式转换,mip-map生成,Direct3D运行时纹理资源的块压缩以及与正常-地图转换。 该库使用Windows...

    texture-synthesis:火炬中的纹理合成

    -output_file :应该将输出写入的路径。 -height :输出文件的高度,以像素为单位。 -width :输出文件的宽度,以像素为单位。 -k :内核大小; 必须是一个奇数整数。 -gpu :使用哪个GPU。 设置gpu &gt;= 0将在...

    hogmatlab源码-tessa:一组用于计算各种纹理特征的Python代码

    Gohlke出色的代码,用于读取和写入图像数据。 其中的一个子集用于测试和演示目的。 SFTA模块实现了Alceu Costa在SIBGRAPI 2012的“纹理分形分析的高效算法”中提出的算法。 CHOG模块实现了Henrik Skibbe和Marco ...

    untiy render texture扭曲技术

    要把相机渲染的当前画面当做贴图传递给shader,然后通过一张动态的noise贴图来采样这张纹理,最后输出到屏幕上。 每个相机都有一个render target,可以通过Camera.targetTexture来设置。如果这个目标为空那就是直接...

    OpenGL-Shadow.zip

    当把一个纹理附加到帧缓冲的时候,所有的渲染指令将会写入到这个纹理中,就想它是一个普通的颜色/深度或模板缓冲一样。使用纹理的优点是,所有渲染操作的结果将会被储存在一个纹理图像中,我们之后可以在着色器中很...

    NVIDIATextureTools独立版+PS插件版本

    新的压缩预览窗格让您能够实时查看图像如何压缩,而无需进行磁盘写入。 目前最新版本还可支持HDR 纹理的 BC6 格式、适用于高质量压缩的 BC7 格式,以及在 Tegra GPU 上进行可扩展压缩的 ASTC 格式,省去纹理导入引擎...

    vtex_c2tga:将编译的阀门纹理 (.vtex_c) 文件转换为 Targa (.tga) 文件

    vtex_c2tga 将编译的阀门纹理 (.vtex_c) 文件转换为 Targa (.tga) 文件。笔记仅处理以 DXT1、DXT5/DXT5_nm 和 RGBA 编码的 vtex 文件,因为这些是目前 Dota2 使用的唯一格式。依赖关系[ImageMagick] ( ) 用于读取 ...

    OpenImageIO-强大的图像和纹理处理库-C/C++开发

    OpenImageIO-强大的图像和纹理处理库,支持多种常见的有损和RAW格式自述文件OpenImageIO简介OIIO的主要目标受众是VFX工作室和工具开发人员,例如渲染器,合成器,查看器以及其他与图像相关的工具您可以在生产管道中...

    Android使用MediaCodeC与OpenGL硬解码 录制mp4音视频实现源码

    将Camera数据显示到OpenGL ES渲染的图像中,并通过MediaCodeC 将 OpenGL ES 缓冲数据,硬编码写入到 mp4 视频文件中,完成视频的录制。 文件介绍请见: https://xiaxl.blog.csdn.net/article/details/72530314 ...

    bmputil:自动检测原始RGB数据的图像宽度,并将格式化的图像写入文件

    bmputil是一个CLI程序,用于处理不知道大小信息的原始RGB数据,例如在提取游戏纹理时。 bmputil可以自动检测此类无头数据流表示的图像的宽度,并以ImageMagick支持的任何图像格式(默认为.png )将格式化的图像写入...

    Visual C#.NET 2008程序设计案例集锦 (源码)

    案例2.2 在图像中写入文字 案例2.3 图像缩放与翻转 .案例2.4 图像的涂沫 案例2.5 百叶窗图像效果 案例2.6 图像的纹理和遮罩动画效果 案例2.7 图像的积木和浮雕效果 案例2.8 文字的360°旋转效果 案例2.9 ...

    WebGL编程指南

    向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...

    WebGL编程指南压缩包

    向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...

    webgl编程指南及源码1/2

    向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...

    webgl编程指南及源码2/2

    向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的...

Global site tag (gtag.js) - Google Analytics