dx11 入门 Tutorial 02: 数据传入GPU的设置 和绘制一个三角形 DirectXSampleBrowser(June 2010)

  烦...一年前看过教程,但全忘掉了,这一年我都干什么了、、、

教程2遇到的两个error:

error 1:ID3DBlob调用不成功 ,是重复调用版本冲突的原因?ID3DBlob在D3DCommon.h中, 因为window include里和SDK里各有一份,造成了冲突,修改头文件的调用,先调用SDK内的即可。参考:http://www.cnblogs.com/Wilson-Loo/archive/2013/01/20/2797902.html 那为什么先后顺序就解决问题呢》

error 2:FXC : error X3501: ‘main‘: entrypoint not found   项目属性里shader的设置问题... 参考http://stackoverflow.com/questions/20363360/fxc-error-x3501-main-entrypoint-not-found

这一讲主要是拷贝数据到GPU中,并设置数据属性,告知GPU。

笔记1:That takes care of storing vertex information in system memory in our application. However, when we feed the
GPU the vertex buffer containing our vertices, we are just feeding it a chunk of memory. The GPU must also know

about the vertex layout in order to extract correct attributes out from the buffer. To accomplish this requires

the use of an input layout.

意思:设置vertex的struct,存储vertex的信息后在vertexBuffer内,但当我们向GPU填充vertexBuffer内的数据时,GPU不知道这块数据干嘛用的,为了告诉GPU数据正确属性,我们使用input layout

// Define the input layout
D3D11_INPUT_ELEMENT_DESC layout[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = ARRAYSIZE(layout);

如上,告知GPU,input到vertexShader里数据块格式为12Byte,

vertex Layout创建前提是:我得有vertexShader,告诉device我需要layout才行;所以ID3DBlob指向编译后shader的二进制地址,然后ID3DBlob和相应的device、context绑定这个inputLayout,。

总结:总体流程:

1.编译fx   VS和PS

2.设置InputLayout的参数,用于input到GPU

3.device、context分别创建和设置vertexLayout,并和相应的编译后的vertexShader绑定(ID3DBlob),

4.device创建vertexBuffer,context设置相应的buffer起始位置、跨度、图元绘制方式

 

时间: 2024-10-12 04:45:13

dx11 入门 Tutorial 02: 数据传入GPU的设置 和绘制一个三角形 DirectXSampleBrowser(June 2010)的相关文章

无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

Stage3D学习笔记(二):使用GPU绘制一个三角形

我们需要使用到Adobe自家提供的AGALMiniAssembler代码类,可以在网下进行下载: 关于AGAL的入门知识可以参考下面的文章: AGAL介绍系列文章(第一部分)AGAL介绍系列文章(第二部分)AGAL介绍系列文章(第三部分) 最终效果如下: 直接上代码了,亲们请查看相关的注释说明: 1 package 2 { 3 import com.adobe.utils.AGALMiniAssembler; 4 5 import flash.display.Sprite; 6 import f

dx11 入门 Tutorial 03: 什么是shader DirectXSampleBrowser(June 2010)

对shader的认知: shader是什么? In Direct3D 11, shaders reside in different stages of the graphics pipeline. They are short programs that, executed by the GPU, take certain input data, process that data, and then output the result to the next stage of the pip

dx11 入门 Tutorial 06: 明白context-&gt;updateSubsource和setConstantBuffers DirectXSampleBrowser(June 2010)

需要明白constantBuffer传入数据到shader的正确使用:: cb1.vOutputColor = XMFLOAT4(0, 0, 0, 0); g_pImmediateContext->UpdateSubresource( g_pConstantBuffer, 0, NULL, &cb1, 0, 0 ); //更新cube的数据 // // Render the cube // g_pImmediateContext->VSSetShader( g_pVertexShade

dx11 入门 Tutorial 04: DX、HLSL中矩阵的内存存储和数学计算方式 DirectXSampleBrowser(June 2010)

主要是两方面: 1.shader数据和dx的通信,使用constant Buffer 2.矩阵的数学计算方式和内存存储方式再DX和HLSL中的异同 先说第一个: dx中的常量数据matrix等传入shader中流程: The first thing that we need to do is declare three constant buffer variables. Constant buffers are used to store data that the application n

dx11 入门篇 Tutorial 01: 基本要素的创建 DirectXSampleBrowser(June 2010)

目标:这几天迅速入门dx11 第一讲主要是基本要素的创建:device .context.view.swap: 笔记: 1.In Direct3D 10, the device object was used to perform both rendering and resource creation. In Direct3D 11, the immediate context is used by the application to perform rendering onto a buf

dx11 入门 Tutorial 05: DepthBuffer的创建 DirectXSampleBrowser(June 2010)

本课主要是矩阵变换和DepthBuffer的创建: 笔记:关于depthBuffer 问题:1.depthBuffer的作用? 2.怎么创建? 作用:我想到的:1.depthTest,保证遮挡,同一个pixel中z值小的渲染:  2.三维世界,需要z值来表示近大远小  3.dx中值在1到0之间 MSDN的解释:1.depthBuffer存储每个pixel的z值,也可以存储stencil值,常用32bit,24bit用于depth数据 8bit用于stencil数据 2.当一个pixel渲染后,里

[转载]AngularJS入门教程02:AngularJS模板

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

在EasyUI中统一判断是否有选中行,如果有则将选中行数据传入回调函数

function procossWithSeletedData(func) { var rowData = $("#tbGrid").datagrid("getSelected"); if (rowData) { func(rowData); //调用回调函数 并传入 选中行数据 } else { $.msgBoxObj.showMsgErr("没有选中行..........!");//提示信息 } } 在EasyUI中统一判断是否有选中行,如果