D3D9学习笔记(五) State

一个state就是对(固定)渲染管线的某个特性或参数的一次设置

state block 记录了一个序列很多的state,可以保存相似的一连串对管线的设置

4.0.1创建state block

1.创建一个State Block并将当前state加入

IDirect3DDevice9::CreateStateBlock()

2.自动的捕捉一短时间的state变化

IDirect3DStateBlock9* pStateBlock = NULL;

pd3dDevice->BeginStateBlock();

。。。

pd3dDevice->EndStateBlock( &pStateBlock );

3.stateblock的操作

Aply
它可以将这段state作用于当前的设备,(注意当前设备中的这段state里没有捕捉的值不会被改变)

capture:捕捉当前设备中那些存在域这个stateblock里的值的state

GetDevice:获取设备

 

4.1 state的种类

Vertex state

Pixel state

Each texture assigned to a sampler

Each vertex texture

Each displacement map texture

The current texture palette

A pointer to the index buffer

The viewport

The scissors rectangle

The world, view, and projection matrices

The texture transforms

The clipping planes

The current material

 

IDirect3DDevice9::BeginStateBlock后记录的操作

IDirect3DDevice9::LightEnable

IDirect3DDevice9::SetClipPlane

IDirect3DDevice9::SetCurrentTexturePalette

IDirect3DDevice9::SetFVF

IDirect3DDevice9::SetIndices

IDirect3DDevice9::SetLight

IDirect3DDevice9::SetMaterial

IDirect3DDevice9::SetNPatchMode

IDirect3DDevice9::SetPixelShader

IDirect3DDevice9::SetPixelShaderConstantB

IDirect3DDevice9::SetPixelShaderConstantF

IDirect3DDevice9::SetPixelShaderConstantI

IDirect3DDevice9::SetRenderState

IDirect3DDevice9::SetSamplerState

IDirect3DDevice9::SetScissorRect

IDirect3DDevice9::SetStreamSource

IDirect3DDevice9::SetStreamSourceFreq

IDirect3DDevice9::SetTexture

IDirect3DDevice9::SetTextureStageState

IDirect3DDevice9::SetTransform

IDirect3DDevice9::SetViewport

IDirect3DDevice9::SetVertexDeclaration

IDirect3DDevice9::SetVertexShader

IDirect3DDevice9::SetVertexShaderConstantB

IDirect3DDevice9::SetVertexShaderConstantF

IDirect3DDevice9::SetVertexShaderConstantI

4.2设置state

vertex
管线的

IDirect3DDevice9::SetRenderState.渲染状态

        

 

 

 

 

 


state名称


默认值


备注


D3DRS_CULLMODE


D3DCULL_CCW


Backface cull


D3DRS_FOGCOLOR


0


雾颜色


D3DRS_FOGTABLEMODE


D3DFOG_NONE


pixel雾的计算方法(线性 一次两次)


D3DRS_FOGSTART


0


雾参数


D3DRS_FOGEND


1


 


D3DRS_FOGDENSITY


1


 


D3DRS_RANGEFOGENABLE


FALSE


 


D3DRS_AMBIENT


0


环境光颜色


D3DRS_COLORVERTEX


TRUE


是否允许指定每个顶点颜色(默认的)


D3DRS_FOGVERTEXMODE


D3DFOG_NONE


vertex雾的计算方法


D3DRS_CLIPPING


TRUE


允许剪裁


D3DRS_LIGHTING


TRUE


开启光照


D3DRS_LOCALVIEWER


TRUE


摄像机相关的光照,如果用正交投影 那么要false


D3DRS_EMISSIVEMATERIALSOURCE


D3DMCS_MATERIAL


自发光体的光源材质


D3DRS_AMBIENTMATERIALSOURCE


D3DMCS_MATERIAL


环境光的。。


D3DRS_DIFFUSEMATERIALSOURCE


D3DMCS_COLOR1


漫反射光的的。。


D3DRS_SPECULARMATERIALSOURCE


D3DMCS_COLOR2


高光的。。。


D3DRS_VERTEXBLEND


D3DVBF_DISABLE


顶点混合(几何变形使用)的矩阵树龄


D3DRS_CLIPPLANEENABLE


0


自定义剪裁平面开启


D3DRS_POINTSIZE


Driver dependent


A float value that specifies the size to use for point size computation in cases where point size is not specified for each vertex


D3DRS_POINTSIZE_MIN


1


精灵点参数


D3DRS_POINTSPRITEENABLE


FALSE


 


D3DRS_POINTSCALEENABLE


FALSE


 


D3DRS_POINTSCALE_A


1


 


D3DRS_POINTSCALE_B


0


 


D3DRS_POINTSCALE_C


0


 


D3DRS_MULTISAMPLEANTIALIAS


TRUE


多采样采用反走样


D3DRS_MULTISAMPLEMASK


0xffffffff


 


D3DRS_PATCHEDGESTYLE


D3DPATCHEDGE_DISCRETE


在面片边缘处的tesselation采用什么方法(比如是否是浮点数,这将使边缘平滑),默认整数


D3DRS_POINTSIZE_MAX


1


 


D3DRS_INDEXEDVERTEXBLENDENABLE


FALSE


 


D3DRS_TWEENFACTOR


0


 


D3DRS_POSITIONDEGREE


D3DDEGREE_CUBIC


 


D3DRS_NORMALDEGREE


D3DDEGREE_LINEAR


 


D3DRS_MINTESSELLATIONLEVEL


1


Tesselation参数


D3DRS_MAXTESSELLATIONLEVEL


1


 


D3DRS_ADAPTIVETESS_X


0


 


D3DRS_ADAPTIVETESS_Y


0


 


D3DRS_ADAPTIVETESS_Z


1


 


D3DRS_ADAPTIVETESS_W


0


 

 

IDirect3DDevice9::SetSamplerState纹理采样状态

只有这一个可设D3DSAMP_DMAPOFFSET

IDirect3DDevice9::SetTexture把一个纹理绑定到管线的设置

IDirect3DDevice9::SetTextureStageState设置当前绑定纹理的状态值

 

 

 

pixel
管线的

IDirect3DDevice9::SetRenderState.渲染状态


D3DRS_ZENABLE


D3DZB_FALSE


 


使用zbuffer


D3DRS_SPECULARENABLE


FALSE


 


使用高光反射


D3DFILLMODE


D3DFILL_SOLID


 


面的填充模式


D3DSHADEMODE


D3DSHADE_GOURAUD


 


渲染模式(目前只有flat和gouraud)


D3DRS_ZWRITEENABLE


TRUE


 


Depth buffer是否可写,注意这个不影响depthbuffer的比较操作


D3DRS_ALPHATESTENABLE


FALSE


 


Alpha 测试(镂空)


D3DRS_LASTPIXEL


TRUE


 


画最后一个pixel为一条线


D3DRS_SRCBLEND


D3DBLEND_ONE


 


两个混合参数的来源


D3DRS_DESTBLEND


D3DBLEND_ZERO


 


 


D3DRS_ZFUNC


D3DCMP_LESSEQUAL


 


深度测试的比较函数


D3DRS_ALPHAREF


0


 


Alpha测试的基准参数


D3DRS_ALPHAFUNC


D3DCMP_ALWAYS


 


Alpha测试的比较函数


D3DRS_DITHERENABLE


FALSE


 


是否开启dithering


D3DRS_FOGSTART


0


 


Fog参数


D3DRS_FOGEND


1


 


 


D3DRS_FOGDENSITY


1


 


 


D3DRS_ALPHABLENDENABLE


FALSE


 


开启Alpha混合


D3DRS_DEPTHBIAS


0


 


深度偏移值,用于区分在一个平面的两个物体的前后


D3DRS_STENCILENABLE


FALSE


 


开启stencil 缓存


D3DRS_STENCILFAIL


D3DSTENCILOP_KEEP


 


Stencil参数(常用于溶解 贴花 描边)


D3DRS_STENCILZFAIL


D3DSTENCILOP_KEEP


 


 


D3DRS_STENCILPASS


D3DSTENCILOP_KEEP


 


 


D3DRS_STENCILFUNC


D3DCMP_ALWAYS


 


 


D3DRS_STENCILREF


0


 


 


D3DRS_STENCILMASK


0xffffffff


 


 


D3DRS_STENCILWRITEMASK


0xffffffff


 


 


D3DRS_TEXTUREFACTOR


0xffffffff


 


 


D3DRS_WRAP0


0


 


 


D3DRS_WRAP1


0


 


 


D3DRS_WRAP2


0


 


 


D3DRS_WRAP3


0


 


 


D3DRS_WRAP4


0


 


 


D3DRS_WRAP5


0


 


 


D3DRS_WRAP6


0


 


 


D3DRS_WRAP7


0


 


 


D3DRS_WRAP8


0


 


 


D3DRS_WRAP9


0


 


 


D3DRS_WRAP10


0


 


 


D3DRS_WRAP11


0


 


 


D3DRS_WRAP12


0


 


 


D3DRS_WRAP13


0


 


 


D3DRS_WRAP14


0


 


 


D3DRS_WRAP15


0


 


 


D3DRS_LOCALVIEWER


TRUE


 


 


D3DRS_EMISSIVEMATERIALSOURCE


D3DMCS_MATERIAL


 


材质指令


D3DRS_AMBIENTMATERIALSOURCE


D3DMCS_MATERIAL


 


 


D3DRS_DIFFUSEMATERIALSOURCE


D3DMCS_COLOR1


 


 


D3DRS_SPECULARMATERIALSOURCE


D3DMCS_COLOR2


 


 


D3DRS_COLORWRITEENABLE


0x0000000f


 


 


D3DBLENDOP


D3DBLENDOP_ADD


 


混合方式


D3DRS_SCISSORTESTENABLE


FALSE


 


开启SCISSORTEST


D3DRS_SLOPESCALEDEPTHBIAS


0


 


深度偏移的一个参数


D3DRS_ANTIALIASEDLINEENABLE


FALSE


 


开启对线的反走样


D3DRS_TWOSIDEDSTENCILMODE


FALSE


 


双面的stencil模式


D3DRS_CCW_STENCILFAIL


D3DSTENCILOP_KEEP


 


 


D3DRS_CCW_STENCILZFAIL


D3DSTENCILOP_KEEP


 


 


D3DRS_CCW_STENCILPASS


D3DSTENCILOP_KEEP


 


 


D3DRS_CCW_STENCILFUNC


D3DCMP_ALWAYS


 


 


D3DRS_COLORWRITEENABLE1


0x0000000f


 


 


D3DRS_COLORWRITEENABLE2


0x0000000f


 


 


D3DRS_COLORWRITEENABLE3


0x0000000f


 


 


D3DRS_BLENDFACTOR


0xffffffff


 


 


D3DRS_SRGBWRITEENABLE


0


 


 


D3DRS_SEPARATEALPHABLENDENABLE


FALSE


 


为alpha通道做独立的混合操作


D3DRS_SRCBLENDALPHA


D3DBLEND_ONE


 


Alpha混合的相关操作


D3DRS_DESTBLENDALPHA


D3DBLEND_ZERO


 


 


D3DRS_BLENDOPALPHA


D3DBLENDOP_ADD


 


 

IDirect3DDevice9::SetSamplerState纹理采样设置


D3DSAMP_ADDRESSU


 


D3DTADDRESS_WRAP


D3DSAMP_ADDRESSV


 


D3DTADDRESS_WRAP


D3DSAMP_ADDRESSW


 


D3DTADDRESS_WRAP


D3DSAMP_BORDERCOLOR


 


0x00000000


D3DSAMP_MAGFILTER


 


D3DTEXF_POINT


D3DSAMP_MINFILTER


 


D3DTEXF_POINT


D3DSAMP_MIPFILTER


 


D3DTEXF_NONE


D3DSAMP_MIPMAPLODBIAS


 


0


D3DSAMP_MAXMIPLEVEL


 


0


D3DSAMP_MAXANISOTROPY


 


1


D3DSAMP_SRGBTEXTURE


 


0


D3DSAMP_ELEMENTINDEX


 


0

 

IDirect3DDevice9::SetTexture把一个纹理绑定到管线的设置

IDirect3DDevice9::SetTextureStageState设置当前绑定纹理的状态值


D3DTSS_COLOROP


D3DTOP_DISABLE


纹理颜色的操纵方式


D3DTSS_COLORARG1


D3DTA_TEXTURE


 


D3DTSS_COLORARG2


D3DTA_CURRENT


 


D3DTSS_ALPHAOP


D3DTOP_DISABLE


 


D3DTSS_ALPHAARG1


D3DTA_TEXTURE


 


D3DTSS_ALPHAARG2


D3DTA_CURRENT


 


D3DTSS_BUMPENVMAT00


0


 


D3DTSS_BUMPENVMAT01


0


 


D3DTSS_BUMPENVMAT10


0


 


D3DTSS_BUMPENVMAT11


0


 


D3DTSS_TEXCOORDINDEX


0


 


D3DTSS_BUMPENVLSCALE


0


 


D3DTSS_BUMPENVLOFFSET


0


 


D3DTSS_TEXTURETRANSFORMFLAGS


D3DTTFF_DISABLE


 


D3DTSS_COLORARG0


D3DTA_CURRENT


 


D3DTSS_ALPHAARG0


D3DTA_CURRENT


 


D3DTSS_RESULTARG


D3DTA_CURRENT


 

 

时间: 2025-01-19 16:28:13

D3D9学习笔记(五) State的相关文章

D3D9学习笔记(五) Resource

Usage 这是强制的属性,使用时要明确确定,下面是每种reource的用途列表 Format <d3d9types.h> 存储访问顺序 D3DFORMAT_ARGB:内存中存储顺序是B到A                             D3DFMT_A8L8代表16位整数,高8位是A 存在未定义通道的格式都被默认为1 数据的底层格式是不同硬件不同的,但是被D3D运行时认可后就都变成这里面D3DFORMAT枚举类里面的某种格式   支持的格式及常见写法 1. (A\R\G\B)bit

kvm虚拟化学习笔记(五)之windows虚拟机性能调整

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1290682 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linuxkvm虚拟机安装htt

C#可扩展编程之MEF学习笔记(五):MEF高级进阶

好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用的基本已经讲完了,相信大家已经能看出MEF所带来的便利了.今天就介绍一些MEF中一些较为不常用的东西,也就是大家口中的所谓的比较高级的用法. 前面讲的导出都是在每个类上面添加Export注解,实现导出的,那么有没有一种比较简便的方法呢?答案是有的,就是在接口上面写注解,这样只要实现了这个接口的类都会

cmake学习笔记(五)

在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使用CMakeLists文件,接下来继续学习find_package的 config 模式及package configure文件相关知识 find_package 的 config 模式 当CMakeLists.txt中使用find_package命令时,首先启用的是 module 模式: 按照 C

Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记目录 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute after the return of a action. /// </summary> public interface IResult { /// <summary> /// Executes the result using the specified context. /

JSP学习笔记(五)-----JSP中使用JavaBean

js|笔记 1. 该实例主要告诉我们怎么样在JSP代码中调用JavaBean构件2. 使用JavaBean的优点是简化了JSP代码,界面代码和逻辑代码互相分离,便于程序员查看和调试3. 该实例需要五个文件:login.jsp,test.jsp, userbean.class4. 首先看一下login.jsp <html><center><form method=post action="http://127.0.0.1:8000/test.jsp">

VC++/MFC学习笔记(五)

 ADO技术介绍ADO是Microsoft最新和最强大的数据访问接口OLE DB而设计的,是一个便于使用的应用程序层.OLE DB为任何数据源都提供了高性能的访问,这些数据源包括关系和非关系数据库.电子邮件.文件系统.文本和图形以及自定义业务对象等.ADO在关键的Internet方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量.高性能的接口.同时ADO使用与DAO相似的约定和特性,使得它更易于学习.这里先介绍一下ADO技术的历史和ADO访问数据源的特点,然

D3D9学习笔记(三) Device

2.1架构 2.2类型 基本的device类型:hal:硬件渲染(发布).这也不是直接访问硬件驱动,而是访问在上一层的hal.(在顶点处理过程中,如果硬件处理失败,可尝试混合处理及纯软处理,设定标志D3DCREATE_MIXED_VERTEXPROCESSING)                                        soft软件渲染(但是这种软渲染并不一定拥有同当前硬件相同的渲染能力,所以要经常检查)                                   

D3D9学习笔记(九) effect (hlsl)

effect其实整合了shader和render state的控制两大部分内容 9.1 effect文件基本框架 part1 :shader state包括全局变量 shader数据结构定义,shader的实现 part2 :texture and sampler state,这个通常是全局变量,用于shader中,通常要定义在shader的实现之前 part3 其他的render state设置,写在technique的pass里,这才是effect文件的主入口 effet中任何一个变量后面都