-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path新建文本文档.txt
93 lines (66 loc) · 5.75 KB
/
新建文本文档.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
使用#include <directxmath.h>替代<xnamath.h>
//#include <xnamath.h>
#include <directxmath.h>
using namespace DirectX;
使用#include <d3d11_1.h>替换#include<d3dx11.h>
//#include<d3dx11.h>
#include <d3d11_1.h>
=======================
针对d3d_compiler,可直接使用win sdk 8自带的lib
注意:d3d_compiler.lib会运行时调用d3dcompiler_XX.dll(xx是版本号),需要将这个dll拷贝到系统目录或程序当前目录下,以便运行时能够加载
注意:这个dll在win sdk 8的bin目录里面有,但有x32、x64两个版本,在拷贝dll时千万别拷错了版本,否则运行时崩溃(0xc000007b Error)
==========
dx11以及移除了effect框架。
首先Effect最大好处的就是简单,使得编写Shader绘制的程序工作量大大下降。
如果不用Effect框架,那么一个个Vertex Shader,Geometry Shader和Pixel Shader都要一遍遍的先用D3DX11CompileFromFile得到二进制代码,再分别调CreateVertexShader, CreateGeometryShader和CreatePixelShader等创建ID3D11VertexShader,ID3D11GeometryShader,ID3D11PixelShader等。
相比之下使用Effect框架的话,在用D3DX11CompileFromFile得到二进制代码后,只需要再调用D3DX11CreateEffectFromMemory得到ID3D11Effect接口便可。
第二个好处是Effect框架下,Directx中的变量和HLSL中的变量绑定逻辑比较清晰(也可以说简单)。
在最新的effect框架中D3DX11CompileFromFile已经废弃了吧,改用D3DX11CompileEffectFromFile
打开Effects11_2015 解决方案 并且使用VS2015重新生成lib库文件的Debug版本和Release版本
将Debug版本的lib库文件重命名为Effects11d.lib,Release版本的lib库文件重命名为Effectsll.lib.并复制
d3dx11effect.h和effect1d.lib和Effectsll.lib相应目录
======
在Direct3D中,除了材质的概念,还存在一个渲染状态(Render State)的概念
======
Effect-Compiler Tool
FXC (fxc.exe) is an offline tool for compiling HLSL shaders for all versions of Direct3D. The tool is located at:
(SDK root)\Utilities\Bin\x86\
===========
把后台绘制好的back buffer与前台的front buffer调换。这个通过IDXGISwapChain::Present()来完成
=========
首先为什么要创建这么一个render target view呢?首先从render target说起,什么是render target呢?前面我们说了,在显示front buffer的时候,Directx在后台渲染back buffer,这就是render target。
为了让Directx能够渲染这个render target,必须将这个buffer绑定到Directx的绘制管道(pipeline)。但是在Directx11中我们不能直接将resource绑定到绘制管道(pipeline),作为更好的方法,我们创建该resource view,然后将它绑定到渲染管道,这样我们就能绘制这个resource了.
buffer就是渲染目标,创建一个渲染目标视图(需要buffer),然后把渲染目标视图绑定到dx的绘制管道,就可以把buffer渲染了(绘制),然后缓存渲染完成后,通过交换链,交换前后缓存(Present()来完成),这样显示器就可以显示前缓存的内容了。
==========
使用swapChain。1:清空RenderTarget,主要是清空上一帧在render target(后台buffer)中绘制的东西,以开始重新绘制新的一帧内容。
=======
在VS中添加lib库的三种方法
注意:
1、每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Properties" -> "Debugging",在"Working Directory"设置dll的路径就可以了
2、无论是设置DLL目录,或者是Lib目录,亦或是头文件的目录,都有release版本和debug版本的区分,每种版本的设置都是独立的,要分别设置。
------------------------------------------------------------------------------------------------------------------------------------------
方法1: 通过设置工程配置来添加lib库.
A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。
B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
C 然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。
这种方法比较繁琐,且不直观,而且还可能要争对debug版本和release版本作不同的配置,因为我们生成的两个版本的库可能放在不同的目录中的.
方法2: 使用编译语句:
#ifdef _DEBUG
#pragma comment(lib,"..\\debug\\LedCtrlBoard.lib")
#else
#pragma comment(lib,"..\\release\\LedCtrlBoard.lib")
#endif
这种方法直观,方便,且可以按如上直接区分出Debug版本和Release版本的不同目录.当然,通过宏,还可以区分更多版本.
但是在指定目录时,不小心容易出错.
方法3: 直接添加库文件到工程中.
就像你添加.h和.cpp文件一样,把lib文件添加到工程文件列表中去.
VC中,切换到"解决方案视图",--->选中要添加lib的工程-->点击右键-->"添加"-->"现有项"-->选择lib文件-->确定.
就是这么简单,搞定.
这个方法适用于在我的工程的debug版本和Release版本中都使用同一个lib库文件时.这样就省去了你1方法配置环境的繁琐,也省去了方法2种语句的可能性错误发生.
功不成,身已退
===============
FXC : error X3501: 'main': entrypoint not found
这个问题出现的原因是将.fx文件(着色器文件)导入自己新建的工程以后,VS2013会默认使用HLSL编译器对其进行编译,而.fx文件中并未定义main函数,所以会导致编译出错。
解决方法是:
右键.fx文件,“属性->配置属性->常规->项类型”,将“HLSL编译器”改为“不参与生成”
=======================