D3D 符合基本程序

#pragma once

#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib") #include<d3d9.h>
#include<d3dx9.h> //TODO: -1 custom vertex
struct CUSTOMVERTEX
{
float x;
float y;
float z;
float rhw;
}; #define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW HRESULT InitD3D(HWND hWnd);
void CleanUp();
void Render();
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
HRESULT InitD3DVertexBuffer(); //TODO: 0 declare d3d variables.
LPDIRECT3D9 g_pd3d = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice9 = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pd3dVB = NULL; //application entry point.
INT WINAPI wWinMain(
HINSTANCE,
HINSTANCE,
LPWSTR,
INT)
{
//initialize wnd class.
WNDCLASSEX wcex;
ZeroMemory(&wcex,sizeof(wcex));
wcex.cbSize=sizeof(wcex);
wcex.hInstance=GetModuleHandle(NULL);
wcex.lpfnWndProc=MsgProc;
wcex.lpszClassName=L"Self001";
wcex.style=CS_CLASSDC; //register wnd class.
RegisterClassEx(&wcex); //create window.
HWND hWnd=CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW,
L"Self001",
L"Self001 Window",
WS_OVERLAPPEDWINDOW,
100,
100,
300,
300,
NULL,
NULL,
wcex.hInstance,
NULL); //init d3d
if(SUCCEEDED(InitD3D(hWnd)))
{
//show window.
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd); //message loop.
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
} //unregister wnd class.
UnregisterClass(L"Self001",wcex.hInstance); return 0;
} //init d3d.
HRESULT InitD3D(HWND hWnd)
{
//create d3d.
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
if(g_pd3d == NULL)
{
return E_FAIL;
} //initialize d3d present parameters.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN; //create d3d device.
if(FAILED(g_pd3d->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice9)))
{
return E_FAIL;
} //init vertex buffer.
if(FAILED(InitD3DVertexBuffer()))
{
return E_FAIL;
} return S_OK;
} //clean up d3d.
void CleanUp()
{
//TODO: 3 clean up d3d.
if(g_pd3dVB != NULL)
{
g_pd3dVB->Release();
} //release device.
if(g_pd3dDevice9 != NULL)
{
g_pd3dDevice9->Release();
} //release d3d.
if(g_pd3d != NULL)
{
g_pd3d->Release();
}
} //render the scene.
void Render()
{
//clear target.
g_pd3dDevice9->Clear(
0,
NULL,
D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,0),
1.0f,
0); //draw primitive.
if(SUCCEEDED(g_pd3dDevice9->BeginScene()))
{
//TODO: 2 render d3d.
g_pd3dDevice9->SetStreamSource(0,g_pd3dVB,0,sizeof(CUSTOMVERTEX));
g_pd3dDevice9->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice9->DrawPrimitive(D3DPT_LINESTRIP,0,3); g_pd3dDevice9->EndScene();
} //present sence.
g_pd3dDevice9->Present(NULL,NULL,NULL,NULL);
} //window message handler.
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
CleanUp();
return 0L;
} return DefWindowProc(hWnd,msg,wParam,lParam);
} //init d3d vertex buffer.
HRESULT InitD3DVertexBuffer()
{
//TODO: 1 init vertex buffer data.
//create vertex data.
CUSTOMVERTEX vertices[4]=
{
{50.0f,50.0f,1.0f,1.0f},
{50.0f,250.0f,1.0f,1.0f},
{250.0f,50.0f,1.0f,1.0f},
{250.0f,250.0f,1.0f,1.0f}
}; //create vertex buffer.
if(FAILED(g_pd3dDevice9->CreateVertexBuffer(
sizeof(vertices),
0,
D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,
&g_pd3dVB,
NULL)))
{
return E_FAIL;
} //fill vertex buffer.
void* pVertices=NULL;
if(FAILED(g_pd3dVB->Lock(0,sizeof(vertices),&pVertices,0)))
{
return E_FAIL;
} memcpy(pVertices,vertices,sizeof(vertices)); g_pd3dVB->Unlock(); return S_OK;
}

程序结果

版权声明:本文博客原创文章,博客,未经同意,不得转载。

D3D 扎带 小样本的更多相关文章

  1. FFmpeg滤镜实现区域视频增强 及 D3D实现视频播放区的拉大缩小

    1.区域视频增强 FFmpeg滤镜功能十分强大,用滤镜可以实现视频的区域增强功能. 用eq滤镜就可以实现亮度.对比度.饱和度等的常用视频增强功能. 推荐两篇写得不错的博文: (1)ffmpeg综合应用 ...

  2. D3D三层Texture纹理经像素着色器实现渲染YUV420P

    简单记录一下这两天用Texture实现渲染YUV420P的一些要点. 在视频播放的过程中,有的时候解码出来的数据是YUV420P的.表面(surface)通过设置参数是可以渲染YUV420P的,但Te ...

  3. D3D的绘制

    一.D3D中的绘制 顶点缓存和索引缓存:IDirect3DVertexBuffer9 IDirect3DIndexBuffer 使用这两缓存而不是用数组来存储数据的原因是,缓存可以被放置在显存中,进行 ...

  4. [ZZ] D3D中的模板缓存(3)

    http://www.cppblog.com/lovedday/archive/2008/03/25/45334.html http://www.cppblog.com/lovedday/ D3D中的 ...

  5. D3D的内存类型

    一.对D3D中AGP显存.内存.显存三种内存的解释 三种内存AGP内存(非本地显存),显存(本地内存),系统内存,其中我们都知道系统内存就是咱那内存条,那这AGP内存是个啥玩意啊?其实是因为在以前显卡 ...

  6. D3D depth buffer的预览

    在使用D3D开发游戏的过程中,很多情况下都会用到depth buffer来完成特定的效果,比如DOF,Shadows,SSAO等等.在这些情况下我们就可能需要预览depth buffer来确定它是正确 ...

  7. D3D中深度测试和Alpha混合的关系

    我在学习D3D的深度测试和Alpha混合的时候,有一些遗憾.书上提供的例子里说一定要先渲染不透明物体,再渲染透明物体,对渲染状态的设置也有特殊要求.我看的很晕.自己查图形学的书,上网找资料,结果还是糊 ...

  8. D3D渲染流程--转载

    http://www.cnblogs.com/ixnehc/articles/1282350.html 先从最基础的写起吧,关于Device的渲染流程. D3D9的Device就是D3D给我们提供的一 ...

  9. 使用D3D渲染YUV视频数据

    源代码下载 在PC机上,对于YUV格式的视频如YV12,YUY2等的显示方法,一般是采用DIRECTDRAW,使用显卡的OVERLAY表面显示.OVERLAY技术主要是为了解决在PC上播放VCD而在显 ...

随机推荐

  1. HGE引擎 - 绘制,声音,碰撞处理

    原帖地址:http://blog.csdn.net/i_dovelemon/article/details/8818037 另外,年代久远,该引擎官网早已上不去了!!! 1.库的安装和下载 从官网上h ...

  2. Bitmap

    Bitmap篇   在前一篇中介绍了使用API做Distinct Count,但是计算精确结果的API都较慢,那有没有能更快的优化解决方案呢? 1. Bitmap介绍 <编程珠玑>上是这样 ...

  3. zend studio 10 实现代码自动换行

    在一篇zend framework 的PHP编码标准的文章中看到了这么一段: 一行 80 字符以内是比较合适,就是说,ZF 的开发者应当努力在可能的情况下保持每行代码少于 80 个字符,在有些情况下, ...

  4. Linux下多线程查看工具(pstree、ps、pstack) (转)

    1. pstree pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+- ...

  5. ThinkPHP 连接Oracle的配置写法,(使用Oci扩展而非PDO的写法)

    測试了非常多遍,TP官网根本就没有给出正确的写法,并且网上搜索到的全都是错误的. 跟踪代码.终于找出了正确的配置写法,备份例如以下.(by default7#zbphp.com) 'DB_TYPE' ...

  6. ThinkPHP的全部配置选项

    return array( /* Dispatch设置 */ 'DISPATCH_ON' => true, // 是否启用Dispatcher // URL模式: 0 普通模式 1 PATHIN ...

  7. 通过openssh远程登录时的延迟问题解决

    Linux下的ssh 服务器一般用的都是open-ssh,可是发现有些时候通过ssh连接服务器时总会有大概10秒钟左右的延迟. 一开始以为是openssh的安全策略,防止端口扫描,后来发现自己想多了. ...

  8. 使用C#和.NET 4编写的并行应用程序“多核并发编程的规则”

    “多核并发编程的规则” 规则的描述如下 1.      并发编程的思想—这条规则就是要谨记并发编程思想进行设计,就像前边章节所提交的. 2.      面向抽象编程-你可以利用.NET4中的TPL提供 ...

  9. Java 并发专题 : Semaphore 实现 互斥 与 连接池

    继续并发方面的知识.今天介绍Semaphore,同样在java.util.concurrent包下. 本来准备通过例子,从自己实现到最后使用并发工具实现,但是貌似效果并不是很好,有点太啰嗦的感觉,所有 ...

  10. Spring、Spring MVC、MyBatis

    Spring.Spring MVC.MyBatis整合文件配置详解 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Sp ...