- 浏览: 16100 次
此篇所言 只针对windows 32 bit 版本 Linux/Unix/Mac/Win64 无关... Win32 下 里面的那个makefile窝用了 无法编译成功 .. 如果你可以编译成功的话 可以无视这篇文章
1. 下载
首先 需要在官网下载d语言的编译器 ... http://dlang.org/download.html
然后 下载 d 语言的directx 库 - bindings 这个项目托管在 GitHub 了 ..https://github.com/CS-svnmirror/dsource-bindings
还有一个 omf 格式 的 lib 工具 这个工具在 下载包里面貌似是没有的 http://pan.baidu.com/s/1dD1ul6T(d语言使用 omf 格式的lib与vc的 coff 格式 lib冲突)
所有原料工具准备完成之后 开始配置环境 ..
2.配置
dmd编译器设置 文本模式打开 dmd2\windows\bin 下的 sc.ini 在
; environment for both 32/64 bit
[Environment]
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" 后面加上 "-I%@P%\..\..\src" ( 示例 : DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" "-I%@P%\..\..\src") 保存退出 ...
bindings 设置
把 bindings 下的 Win32 文件夹移动到 dmd 编译器 文件夹的 dmd2\src 下 ... 好了 剩下就是生成 lib 了 实际上这也是本篇比较麻烦的地方 窝只说怎么做 没说为什么 .. 有兴趣可以自己看看函数调用约定以及c/c++/d 风格的函数修饰名 以及 implib/.def/lib 的用法
lib 设置
打开 lib 包里面的 implib ... bindings 不提供 lib 不然自己要LoadLibaray 或者 GetProcAddress 了 ... 很麻烦 ...再把系统system32下的 d3d9.dll 拿出来 新建一个.def文件 写上 (其余函数/DLL一样)
LIBRARY "d3d9"
EXPORTS
_Direct3DCreate9@4 = Direct3DCreate9
保存退出 打开命令行 输入 implib /noi /system d3d9.lib d3d9.def 得到的lib 放在 默认的lib目录下 ... (dmd2\windows\lib)
编译一下如下代码试一下是否配置成功
1. 下载
首先 需要在官网下载d语言的编译器 ... http://dlang.org/download.html
然后 下载 d 语言的directx 库 - bindings 这个项目托管在 GitHub 了 ..https://github.com/CS-svnmirror/dsource-bindings
还有一个 omf 格式 的 lib 工具 这个工具在 下载包里面貌似是没有的 http://pan.baidu.com/s/1dD1ul6T(d语言使用 omf 格式的lib与vc的 coff 格式 lib冲突)
所有原料工具准备完成之后 开始配置环境 ..
2.配置
dmd编译器设置 文本模式打开 dmd2\windows\bin 下的 sc.ini 在
; environment for both 32/64 bit
[Environment]
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" 后面加上 "-I%@P%\..\..\src" ( 示例 : DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" "-I%@P%\..\..\src") 保存退出 ...
bindings 设置
把 bindings 下的 Win32 文件夹移动到 dmd 编译器 文件夹的 dmd2\src 下 ... 好了 剩下就是生成 lib 了 实际上这也是本篇比较麻烦的地方 窝只说怎么做 没说为什么 .. 有兴趣可以自己看看函数调用约定以及c/c++/d 风格的函数修饰名 以及 implib/.def/lib 的用法
lib 设置
打开 lib 包里面的 implib ... bindings 不提供 lib 不然自己要LoadLibaray 或者 GetProcAddress 了 ... 很麻烦 ...再把系统system32下的 d3d9.dll 拿出来 新建一个.def文件 写上 (其余函数/DLL一样)
LIBRARY "d3d9"
EXPORTS
_Direct3DCreate9@4 = Direct3DCreate9
保存退出 打开命令行 输入 implib /noi /system d3d9.lib d3d9.def 得到的lib 放在 默认的lib目录下 ... (dmd2\windows\lib)
编译一下如下代码试一下是否配置成功
module winsamp; pragma (lib, "gdi32.lib"); pragma (lib, "d3d9.lib"); import core.runtime; import core.sys.windows.windows; //import win32.directx.d3d9caps; import win32.directx.d3d9; //import win32.directx.d3dx9; import std.string; IDirect3DDevice9 Device = null; IDirect3DSurface9 _surface = null; enum { VIDEO_WIDTH = 256, VIDEO_HEIGHT = 240, WINDOW_BOUNDARY = 4, WINDOW_TOP_BOUNDARY = 23 } extern(C) void FillBG (uint p32BitVram, uint pitch, uint color, uint width, uint height){ asm { naked ; // use naked asm mode pushad ; // - N save lod frame // - N mov ESI, 48[ESP] ; // ESI <- width mov EAX, 44[ESP] ; // EAX <- color mov EBP, 40[ESP] ; // EBP <- pitch lea EBX, [ESI*4] ; // EBX <- get correct x width size (32 bit * 4) mov EDI, 36[ESP] ; // EDI <- p32BitVram sub EBP, EBX ; // EBP <- correct difference value mov EBX, 52[ESP] ; // EBX <- y cnt mov ECX, ESI ; // save frame align 16 ; // FBG_loop: rep ; // pixel copy stosd ; add EDI, EBP ; // move pixel pointer mov ECX, ESI ; // recover x cnt dec EBX ; // dec y cnt jnz FBG_loop ; // is end popad ; // over restore REG ret ; // return child proc end } } void DrawSurface ( DWORD color ) { static D3DSURFACE_DESC sur_desc; static D3DLOCKED_RECT vramRECT; Device.BeginScene(); // start drawing ... Device.GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&_surface); _surface.GetDesc(&sur_desc);// _surface.LockRect(&vramRECT,null, 0); FillBG(cast(uint)vramRECT.pBits, vramRECT.Pitch, color, VIDEO_WIDTH,VIDEO_HEIGHT); _surface.UnlockRect(); Device.EndScene(); Device.Present(null, null, null, null); } extern(Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { int result; void exceptionHandler(Throwable e) { throw e; } try { Runtime.initialize(&exceptionHandler); result = myWinMain(hInstance, hPrevInstance, lpCmdLine, iCmdShow); Runtime.terminate(&exceptionHandler); } catch (Throwable e) { MessageBoxA(null, e.toString().toStringz, "Error", MB_OK | MB_ICONEXCLAMATION); result = 0; } return result; } int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { string caption = "DirectX Sample"; string className = "DWndClass"; HWND hWnd, btnClick, btnDontClick; MSG msg; WNDCLASS wndclass; wndclass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = &WindowProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIconA(null, IDI_APPLICATION); wndclass.hCursor = LoadCursorA(null, IDC_CROSS); wndclass.hbrBackground = cast(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = null; wndclass.lpszClassName = className.toStringz; if (!RegisterClassA(&wndclass)) { MessageBoxA(null, "Couldn't register Window Class!", caption.toStringz, MB_ICONERROR); return 0; } hWnd = CreateWindowA(className.toStringz, // window class name caption.toStringz, // window caption WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position VIDEO_WIDTH + WINDOW_BOUNDARY * 2, // initial x size VIDEO_HEIGHT + WINDOW_BOUNDARY + WINDOW_TOP_BOUNDARY, // initial y size HWND_DESKTOP, // parent window handle null, // window menu handle hInstance, // program instance handle null); // creation parameters if (hWnd is null) { MessageBoxA(null, "Couldn't create window.", caption.toStringz, MB_ICONERROR); return 0; } ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); IDirect3D9 pD3d9 = Direct3DCreate9(D3D_SDK_VERSION); if( pD3d9 is null ) { MessageBoxA(null, "Direct3DCreate9() - FAILED", "DirectX", MB_ICONERROR); return false; } static D3DCAPS9 caps; pD3d9.GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps); int vp = 0; if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; else vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; D3DPRESENT_PARAMETERS d3dpp; d3dpp.BackBufferWidth = 0; d3dpp.BackBufferHeight = 0; d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; d3dpp.BackBufferCount = 1; d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp.MultiSampleQuality = 0; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hWnd; d3dpp.Windowed = true; d3dpp.EnableAutoDepthStencil = true; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; pD3d9.CreateDevice( D3DADAPTER_DEFAULT, // primary adapter D3DDEVTYPE_HAL, // device type hWnd, // window associated with device vp, // vertex processing &d3dpp, // present parameters &Device); // return created device pD3d9.Release(); // done with d3d9 object while(msg.message != WM_QUIT) { if(PeekMessageA(&msg, null, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageA(&msg); } else { DrawSurface(0xfe11c3); } } Device.Release(); return cast(int) msg.wParam; } extern(Windows) LRESULT WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) nothrow { switch (message) { case WM_DESTROY: PostQuitMessage(0); break; default: break; } return DefWindowProcA(hWnd, message, wParam, lParam); }
相关推荐
Visual Studio提供了一个集成的开发环境(IDE),可以编写C++代码,这是大多数DirectX应用的基础语言。 接着,你需要获取并安装DirectX SDK(Software Development Kit)。虽然现在DirectX的部分功能已被Windows ...
通过上述步骤,我们可以有效地在Visual Studio 2005环境中配置DirectX,从而支持多媒体应用程序的开发工作。值得注意的是,在实际操作过程中可能会遇到各种各样的问题,但只要按照正确的方法逐一排查,通常都能够...
HLSL是一种专为微软DirectX设计的着色语言,用于编写图形处理单元(GPU)上的着色器程序,实现复杂的图形效果。 在书中的第一章,作者首先引导读者进入DirectX 3D编程的世界。入门程序的讲解涵盖了程序的基本结构,...
首先,书中的内容可能包括了DirectX的基本结构,讲解如何安装和配置DirectX开发环境,以及如何设置项目来开始编写DirectX代码。这一步至关重要,因为它是所有后续开发工作的基础。 接着,书会深入讲解DirectX的图形...
"DirectX 龙书源码"指的是由著名计算机图形学专家Frank D. Luna所著的《Introduction to 3D Game Programming with DirectX 11》(通常被称为“DirectX 龙书”或“红龙书”)一书中的示例代码。这本书是DirectX编程...
在Delphi编程环境中,使用DirectX可以实现高效能的游戏开发、多媒体处理和其他图形密集型应用。本篇文章将深入探讨如何在Delphi中利用DirectX进行程序开发。 一、DirectX的主要组件 DirectX包含以下几个主要组件:...
Visual C++作为编程语言,提供了与DirectX接口的良好集成,使得开发者可以方便地编写高性能的游戏代码。 在学习过程中,读者可能会接触到以下关键知识点: 1. **Direct3D基础**:了解Direct3D的基本结构,包括设备...
在本教程中,我们将探讨如何使用C++和DirectX 10来构建一个简单的2D游戏。DirectX是微软开发的一套应用程序接口(API),主要用于处理游戏开发中的图形、音频和输入等任务,尤其适用于Windows平台。C++是一种强大且...
《2D游戏编程笔记——DirectX库的使用》是一篇深入浅出地讲解DirectX库在2D游戏编程中应用的教程。作者蒋志强以轻松的写作风格,详细介绍了DirectX库,尤其是DirectDraw组件的使用。这篇文章适合已经有一定C++编程...
- **Visual Studio 2005**: 一款功能强大的集成开发环境,适用于多种语言的程序开发,包括C++。DirectShow主要基于C++进行开发。 - **DirectX 9.0b SDK**: DirectShow作为DirectX的一个组成部分,其SDK包含了...
1. **初始化DirectX**:在程序启动时,需要初始化DirectX环境,这包括设置设备、上下文以及必要的配置。 2. **创建资源**:按钮的视觉效果通常由位图、颜色或者几何形状构成。在D2D中,你需要加载或创建这些资源,...
C++是一种强大的、通用的编程语言,常用于构建高性能的应用程序,包括使用DirectX的图形密集型项目。 在“屏幕框架 directx 有注释 c++”的主题下,我们可以深入探讨以下几个关键知识点: 1. **DirectX API**: ...
本资源是一个关于DirectX 9的课本代码库,使用C++语言编写,对于学习DirectX 9编程具有很高的参考价值。 在C++中,使用DirectX 9进行游戏或者图形编程,通常需要以下几个步骤: 1. **初始化DirectX**:首先,需要...
如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和...
C++是一种广泛使用的编程语言,它与DirectX结合,可以实现高效的图形处理和游戏编程。CMake则是一个跨平台的构建系统,帮助开发者管理项目在不同操作系统上的编译过程。本篇文章将深入探讨如何使用DirectX 9、C++和...
在这个"易语言D2D发光字"的实例中,我们主要探讨的是如何利用易语言及其DirectX2D支持库来创建具有发光效果的文字。 DirectX2D是微软开发的一个2D图形处理API,它是DirectX的一部分,主要用于Windows平台的游戏开发...
1. **源代码**:C++或者C#等编程语言的源代码,用于实现D3D菜单的逻辑和功能。 2. **资源文件**:如纹理、模型、音效等,用于美化和丰富菜单的视觉体验。 3. **配置文件**:可能包含设置项,允许用户根据自己的喜好...
- **第一周**:介绍游戏编程的基本概念、DirectX的安装配置以及简单的图形绘制。 - **第二周**:深入探讨高级图形技术,如纹理映射、光照效果等,并介绍如何创建动画和交互式对象。 - **第三周**:讲解游戏物理引擎...
《2D坦克大战》是一款基于DirectX技术开发的2D游戏,它仿照了经典FC(Family Computer,即任天堂红白机)上的坦克大战游戏。这款游戏的核心在于提供了一个平面战场,玩家通过控制坦克,与敌方坦克进行战斗,目标是...
3. **Delphi编程语言**:Delphi是基于Object Pascal的集成开发环境(IDE),由Embarcadero Technologies开发。它提供了一个高效的编译器和丰富的库,适合快速开发Windows桌面应用程序,包括3D图形和游戏开发。 4. *...