精华内容
下载资源
问答
  • Direct3D 加速停用

    2016-01-29 03:31:11
    Direct3D 加速停用程序
  • 可以关闭Direct3D加速。DirectDraw加速等
  • 禁用和开启DirectDraw加速,Direct3D 加速,AGP纹理加速批处理 在使用本程序前,请先确认你已经安装最新的显卡驱动程序 使用说明: 解压缩,XP系统用户直接运行BAT文件,WIN7系统用户,请右键以管理员身份运行,否则...
  • Direct3D基础——Direct3D概述

    千次阅读 2018-11-14 22:32:00
    Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系: 图中Direct3D部分是一套已经定义好的...

    概述

    Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系:

    图中Direct3D部分是一套已经定义好的,由Direct3D提供给应用程序和开发人员的接口函数,这些接口代表了当前Direct3D支持的所有功能。

    注意:有些功能Direct3D支持,但是硬件设备却未必支持。

    在上述的图中,Direct3D和硬件设备之间有一个环节:HAL(硬件抽象层),因为市面上的图形卡的种类太多了,Direct3D无法直接和硬件设备进行交互,例如:同样的一个清屏操作,不同的图形卡之间的操作可能大不一样。所以Direct3D就需要设备的制造商来实现一个HAL。

    HAL是一个指示设备完成某些操作的设备相关的代码集,简单地说:HAL是代码集

    基于HAL,Direct3D就可以不必关心底层硬件,其规范的指定便可以独立于硬件设备。

    总结:设备制造商将自己硬件所支持的所支持的全部功能,都是实现到HAL里面。那些Direct3D支持但是设备不支持的功能就无法在HAL中实现。也就是说:调用一个没有在HAL中实现的Direct3D函数,就会调用失败(除非他是一种顶点处理运算,并且用户已经指定了软件顶点运算处理方式,这点暂时我也不太明白,有时间请教大神之后,再来补充吧)。

    所以当你使用仅仅为少数的硬件实现的Direct3D功能的时候,务必要验证自己的硬件是否支持该功能。

    REF设备

    有时候Direct3D提供的而某些功能,本地的硬件不支持,但是还需要去使用这些功能,为了满足这些功能,Direct3D提供参考光栅设备,也就是REF设备,它能以软件的运行方式完全支持Direct3D API,借助REF设备您可以使用当前硬件不支持的功能,并对这些功能进行测试。

    注意:REF设备仅仅应用于开发阶段,它与DirectX SDK绑定在一起,无法发布给最终的用户,此外,REF设备的速度十分的缓慢,在测试以外的场合十分不适用。

    D3DDEVTYPE

    在代码程序中,HAL设备用值D3DDEVTYPE_HAL来指定,该值是D3DDEVTYPR枚举类型的成员之一。类似的:REF设备用值D3DDEVTYPR_REF来指定,该值也是D3DDEVTYPE,枚举成员之一。

    这些设备非常重要,因为我们在创建设备的时候,需要指定使用哪一种设备类型。

    COM(组件对象模型)

    COM(组件对象模型)是一项使得DirectX独立于编程语言并具备向下兼容特性的技术,我们常称COM对象为接口,可将其视为一个C++的类来使用。

    关于COM组件,我们应该铭记以下:

    1、我们仅仅需要知道的是:如何通过某个特定的函数或者COM接口的方法来获取指向一COM接口的指针。

    2、创建COM接口时,不可以使用C++的关键字new。

    3、使用完一个接口,应该调用接口相应的Release方法,而不是C++的关键字delete

    4、所有的COM接口都继承自IUnknown,该接口提供了Release方法,使COM对象能够对其掌控的内存进行管理。

    5、COM接口都有一个前缀“I”

    下面是:DirectX9.03D库的下载地址:链接:https://pan.baidu.com/s/1028NylXtE6T3Y7MSVEs2GQ 密码:rp5x

    展开全文
  • 这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档。并准备记录一下用ffmpeg实现dxva2,将在第三篇写到。... Direct3D设备管理器(Direct3D device manager)允许两个或多个对象(obj...

      这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档。并准备记录一下用ffmpeg实现dxva2,将在第三篇写到。这是第一篇,英文原址:https://msdn.microsoft.com/en-us/library/aa965267(v=vs.85).aspx 

      Direct3D设备管理器(Direct3D device manager)允许两个或多个对象(object)共用同一个Direct3D 9 设备(device)。其中一个对象作为Direct3D 9 设备的拥有者。要能共享设备,拥有设备的对象(the owner)要创建Direct3D设备管理器,其他对象可以获得一个指向这个设备管理器的指针,然后通过设备管理器获得一个指向Direct3D 设备的指针。每个使用这个设备的的对象都有一个互斥锁,防止与其他设备同时使用这个设备。(我的注释:即一次只能有一个对象使用设备,不能两个对象同时使用同一个设备。这就是锁的互斥功能)

    注意:Direct3D 设备管理器只支持Direct3D 9 设备。不支持DXGI 设备.

        要创建Direct3D 设备管理器, 需要调用DXVA2CreateDirect3DDeviceManager9函数。这个函数返回一个指向这个创建的设备管理器的IDirect3DDeviceManager9接口的指针,以及一个重置标志(reset token)。重置标志使得使用Direct3D 设备的对象能够通过这个设备管理器设置(或重置)设备。调用IDirect3DDeviceManager9::ResetDevice函数以初始化设备管理器,传入Direct3D设备的指针和重置标志(这句翻译的不好,就是把这两个参数传给函数来初始化设备,看下面的代码就会明白)。

    以下代码展示如何创建和初始化设备管理器。

    HRESULT CreateD3DDeviceManager(
        IDirect3DDevice9 *pDevice, 
        UINT *pReset, 
        IDirect3DDeviceManager9 **ppManager
        )
    {
        UINT resetToken = 0;
    
        IDirect3DDeviceManager9 *pD3DManager = NULL;
    
        HRESULT hr = DXVA2CreateDirect3DDeviceManager9(&resetToken, &pD3DManager);
    
        if (FAILED(hr))
        {
            goto done;
        }
    
        hr = pD3DManager->ResetDevice(pDevice, resetToken);
    
        if (FAILED(hr))
        {
            goto done;
        }
    
        *ppManager = pD3DManager;
        (*ppManager)->AddRef();
    
        *pReset = resetToken;
    
    
    done:
        SafeRelease(&pD3DManager);
        return hr;
    }

    拥有设备的对象必须给其他对象提供一种获得IDirect3DDeviceManager9接口指针的方式。标准机制是实现IMFGetService接口。改服务的GUID是MR_VIDEO_ACCELERATION_SERVICE。

        要在多个对象中共用设备,每个对象(包括拥有设备的对象)必须通过设备管理器去获得设备,如下:

    (1)调用IDirect3DDeviceManager9::OpenDeviceHandle函数获取设备句柄。

    (2)要想使用设备,调用IDirect3DDeviceManager9::LockDevice并传入设备句柄。该方法返回一个指向IDirect3DDevice9 接口的指针。该方法能以阻塞和非阻塞两种模式调用,取决于fBlock参数的值。

    (3)用完设备后,应调用IDirect3DDeviceManager9::UnlockDevice。这样其他对象就可以使用这个设备了。

    (4)退出前,调用IDirect3DDeviceManager9::CloseDeviceHandle关闭设备句柄。

        你应当只在使用设备的时候才设置设备锁(the device lock),因为设置设备锁会阻止其他对象使用设备。(我的注释:这一点如果有疑惑,百度一下互斥锁的定义就会明白了,就是一个防止多个对象同时使用同一个设备导致混乱的互斥机制)

        拥有设备的对象(the ownder)可以通过调用ResetDevice函数在任意时候切换到其他设备,特别地,在原始设备丢失的情况下。设备丢失可以由各种原因造成,包括改变显示器分辨率,电源管理操作,锁定或解锁电脑,等等。更多情况,请转Direct3D文档。

        ResetDevice函数会把任何之前打开的设备句柄置为无效。设备无效后,LockDevice函数返回DXVA2_E_NEW_VIDEO_DEVICE。如果发生这种情况,关闭句柄并再次调用OpenDeviceHandle以重新获得新的设备句柄,如以下代码锁展示的。

    下面的例子展示了如何打开设备句柄和锁设备(lock the device)。

    HRESULT LockDevice(
        IDirect3DDeviceManager9 *pDeviceManager,
        BOOL fBlock,
        IDirect3DDevice9 **ppDevice, // Receives a pointer to the device.
        HANDLE *pHandle              // Receives a device handle.   
        )
    {
        *pHandle = NULL;
        *ppDevice = NULL;
    
        HANDLE hDevice = 0;
    
        HRESULT hr = pDeviceManager->OpenDeviceHandle(&hDevice);
    
        if (SUCCEEDED(hr))
        {
            hr = pDeviceManager->LockDevice(hDevice, ppDevice, fBlock);
        }
    
        if (hr == DXVA2_E_NEW_VIDEO_DEVICE)
        {
            // Invalid device handle. Try to open a new device handle.
            hr = pDeviceManager->CloseDeviceHandle(hDevice);
    
            if (SUCCEEDED(hr))
            {
                hr = pDeviceManager->OpenDeviceHandle(&hDevice);
            }
    
            // Try to lock the device again.
            if (SUCCEEDED(hr))
            {
                hr = pDeviceManager->LockDevice(hDevice, ppDevice, TRUE); 
            }
        }
    
        if (SUCCEEDED(hr))
        {
            *pHandle = hDevice;
        }
        return hr;
    }

    转载于:https://www.cnblogs.com/betterwgo/p/6124588.html

    展开全文
  • Direct3D基础

    2012-06-27 23:01:00
    1. Direct3D概述 Direct 3D 是一种低层图形API( Application Programming Interface,应用程序接口), 它能让我们利用3D 硬件加速来渲染3D 世界。我们可以把Direct3D看作是应用程序和图形设备(3D硬件)之间的中介。...
    1. Direct3D概述

    Direct 3D 是一种低层图形API( Application Programming Interface,应用程序接口), 它能让我们利用3D 硬件加速来渲染3D 世界。我们可以把Direct3D看作是应用程序和图形设备(3D硬件)之间的中介。通过利用Direct3D API编程,能够屏蔽许多底层实现的技术细节,缩短开发周期。下图显示了Direct3D,H AL(Hardware Abstraction Layer,硬件抽象层)及硬件之间的关系。其中HAL即硬件抽象层,是一组指示设备执行某种操作的特殊设备代码的集合,由设备制造商实现,Direct3D不能直接作用于图形设备,通过使用HAL与硬件图形设备协同工作。如下图所示,Direct3D应用程序最终通过图形卡的设备驱动程序访问图形硬件。由于HAL存在,Direct3D将可以不需要了解某个设备的具体硬件特性,使它能够独立于硬件设备。Direct3D提供了相应的方法在运行时检查设备是否能执行某项操作。

                                                              

      

    图2.2.1  Direct3D层次

    2. Direct3D重要概念

    1. 近似顶点: 一个场景是多个物体或模型的集合。一个物体可以用三角形网格来表示,3D世界中最基本的图元就是三角形,一个多边形的两边相交的点叫做顶点。为了描述一个三角形,我们通常指定三个点的位置来对应三角形的三个顶点,这样我们就能够很明确的表示出这个三角形。3D物体中的三角形经常会有许多共用顶点。为了解决复杂精细场景重复顶点占用更多的渲染带宽,我们在创建一个顶点列表的同时也创建一个索引列表。顶点列表包含所有不重复的顶点,索引列表中则用顶点列表中定义的值来表示每一个三角形的构造方式。通常每个顶点都包含如下信息:x,y,z坐标值、颜色值、用于计算灯光的法线和纹理坐标(u, v)。

    2. 表面:是一个像素点阵,主要用来存储2D图形数据。表面数据就像一个矩阵,像素数据实际上是存储在线性数组里面。Direct3D里面的IDirect3DSurface9接口用来描述表面,这个接口提供一些方法来直接操作表面数据。

    3. 多重采样(MultiSampling) :由于使用像素来表示图像,在显示时会出现锯齿状。MultiSampling就是使图像变得平滑的技术。它的最普通的用法就是全屏抗锯齿。D3DMULTISAMPLE_TYPE枚举类型能使我们制定全屏抗锯齿的质量等级。

    4. 交换链和页面交换:Direct3D通常建立2--3个页面组成一个集合,即为交换链,通常由IDirect3DSwapChain接口来表示。交换链和页面交换技巧被用在使两帧动画之间过渡更加平滑。通常由Direct3D自己去管理。

    5. 深度缓冲:深度缓冲是一个表面,但它不是用来存储图像数据而是用来记录像素的深度信息。深度缓冲为每一个像素计算深度值,并进行深度测试。通过深度测试我们可以知道哪个像素离摄像机近从而把它画出来。这样就可以只绘制最靠近摄像机的像素,被遮住的像素就不会被画出来。

    6. 顶点处理:顶点是3D图形学的基础,它能够通过两种不同的方法来处理,一种是:软件顶点处理(Software Vertex Processing),二种是:硬件顶点处理(Hardware Vertex Processing)。前者总是被支持而且永久可用,后者要显卡硬件支持顶点处理才可用。使用硬件顶点处理总是首选,因为它比软件方式更快,而且不占用CPU资源。如果一块显卡支持硬件顶点处理的话,也就是说它支持硬件几何变换和光照计算。

    7. 设备能力:Direct3D支持的每一种特性都对应于D3DCAPS9结构的一个数据成员,初始化一个D3DCAPS9实例应该以你的设备实际支持的特性为基础。因此,在我们的应用程序里,我们能够通过检测D3DCAPS9结构中相对应的某一成员来检测设备是否支持这一特性。

     

    3. Direct3D初始化

    初始化步骤:

    1. 获得 IDirect3D9接口指针。

    2. 检查设备的技术特性,确定显卡是否支持硬件顶点处理。

    3. 初始化一个D3DPRESENT_PARAMETER结构实例,这个结构包含了许多数据成员,它允许我们指定将要创建IDirect3DDevice9接口的特性。

    4. 创建一个基于已经初始化好了的D3DPRESENT_PARAMETER结构的IDirect3DDevice9对象。

    转载于:https://www.cnblogs.com/liwenbin/archive/2012/06/27/2566484.html

    展开全文
  • 我这几天安装windows server 2003,想架设游戏,但是,Direct3D,硬件加速都不能用,我访问了各大论坛,各个技术人员都没有很好解决方法,最后我自己解决了,“dxdiag”这个对很多人来说都是知道的,但是往往安装了...
    我这几天安装windows server 2003,想架设游戏,但是,Direct3D,硬件加速都不能用,我访问了各大论坛,各个技术人员都没有很好解决方法,最后我自己解决了,“dxdiag”这个对很多人来说都是知道的,但是往往安装了Direct9,在那里查询还是没有变,依然是旧的- -!。游戏还是不能玩,我用了Direct 随意卸和Direct卸载大师,还是没用,最后我发现要打开硬件加速才可以,有些人就会问,硬件加速在哪。在“个性化”---“显示设置”---“疑难解答”---“硬件加速”但是开启不了,这就要结合我下面的了,对了还有补丁(见地址),全加速后就能打开3D加速了

    如果你跟我一样,是在一个集成显卡的机器上装了Windows 2003,那么你会发现,在显示设置中无法开启硬件加速,呵呵,这里,我就给大家提供一个解决的方法,反正我已经尝试成功了

    在装Windows Server 2003系统的时候忽略了一个问题,装完系统还没有装显卡驱动的时候,在“个性化”---“显示设置”---“疑难解答”---“硬件加速”是可以完全加速的,但是这种加速是没有多大效果,在安装好显卡驱动并且没有重新启动计算机的时候,显卡驱动并不完全生效,所以在“硬件加速”依旧可以全开。

    重新启动之后,发现“硬件加速”选项变成灰色,不可设置,而这时硬件加速实际上只打开了20%左右,在我们观看高清电影或者3D游戏的时候,会发现明显的不清晰。

    有很多人提出用XP版本的驱动来代替Vista下并不完善的驱动,这种方法的确可以使得硬件加速全开,但是作为代价是,我们失去了Vista所特有的 Aero特效,偶然在网上看到有个显卡全加速的补丁,是三个与显示有关的dll文件,用来替换掉C盘windows/system32文件夹下的三个相应的文件(详见下面的网盘下载地址),可以达到打开调节硬件加速选项的功能。

    但是我们遇到的另一个问题是系统文件是强烈受保护的,普通的权限设置是无法完成替换功能的,我们可以新建一个注册表文件,如下:

    注意:如果您安装了Vista优化大师(点此下载最新版),请跳过注册表这部,Vista优化大师中的右键管理有这个添加管理员提权的选项。

    // 把本行以下的内容保存为1个 .reg 文件 ///

    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\*\shell\runas]
    @="管理员取得所有权"
    "NoWorkingDirectory"=""

    [HKEY_CLASSES_ROOT\*\shell\runas\command]
    @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
    "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

    [HKEY_CLASSES_ROOT\exefile\shell\runas2]
    @="管理员取得所有权"
    "NoWorkingDirectory"=""

    [HKEY_CLASSES_ROOT\exefile\shell\runas2\command]
    @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
    "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

    [HKEY_CLASSES_ROOT\Directory\shell\runas]
    @="管理员取得所有权"
    "NoWorkingDirectory"=""

    [HKEY_CLASSES_ROOT\Directory\shell\runas\command]
    @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
    "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

    // 把本行以上的内容保存为1个 .reg 文件 ///

    大家将以上内容保存为reg文件,然后将双击这个.reg文件添加到注册表。

    如此以来我们在右键菜单中便多了一项“管理员取得所有权”的选项,在C盘windows/system32文件夹下找到相应的三个文件,右键“管理员获得所有权”然后将新的文件复制替换就可以了。

    附,显卡全加速补丁:http://www.namipan.com/d/ca9e7b122925e3a74522b0616811b46d1aed220f11440000  

    管理员取得所有权注册表文件:http://www.namipan.com/d/0046c767c219ae7cee510b22841da322d752ef0f9e010000
    展开全文
  • Direct3D 初始化

    千次阅读 2013-11-29 20:59:09
    Direct3D是一套底层图形API,借助API,我们能够利用硬件加速功能绘制3D场景,Direct3D 可以被视为应用程序与图形设备交互式的中介,它们之前的关系可以描述如下 应用程序--->Direct3D--->HAL--->图形设备 在Direct3D...
  • 初始化Direct3D(1)

    2019-09-19 12:47:31
    Direct3D是一种低层图形API,它能让我们利用3D硬件加速来渲染3D世界。我们可以把Direct3D看作是应用程序和图形设备之间的中介。例如通知图形设备清空屏幕,应用程序将调用Direct3D的IDirect3DDevice9::Clear方法。图...
  • DirectX11 Direct3D基本概念

    千次阅读 2015-09-27 19:58:53
    Direct3D是一种底层绘图API(application programming interface,应用程序接口),它可以让我们可以通过3D硬件加速绘制3D世界。从本质上讲,Direct3D提供的是一组软件接口,我们可以通过这组接口来控制绘图硬件。...
  • 启用Direct3D功能

    千次阅读 2019-01-07 23:09:17
    安装了DirectX 9.0C和显卡驱动后,dxdiag查看发现Direct3D等功能没有启用,原来win2003默认是禁用,需要在显示属性中把硬件加速全启用。设置方式如下:【开始菜单】-【控制面板】-【显示】窗体的【设计】页面的...
  • Direct3D/HLSL简单的介绍

    2011-03-23 21:20:52
    本文会对Direct3D/HLSL做一个简单的介绍,但是假设读者已经了解和掌握了Direct3D/HLSL的基本知识。 简介. 1)Direct3D和HLSL ...通过Direct3D,我们可以访问高速的图形加速卡。它是DirectX众多成员的一部分。
  • 概述Direct3D是一种底层绘图API(application programming interface,应用程序接口),它可以让我们可以通过3D硬件加速绘制3D世界。从本质上讲,Direct3D提供的是一组软件接口,我们可以通过这组接口来控制绘图硬件...
  • 如何开启Direct3D

    2007-11-04 16:09:00
    有时,机器重装后,玩魔兽这类的游戏,会提示Direct3D没有开启。 使用dxdiag命令,打开DX诊断工具,发现Direct3D不可用。 此时可以 右击,桌面,属性,设置,高级,疑难解答,把硬件加速拉到最右边 而后就可以启用...
  • struct AVD3D11VAContext{ ID3D11VideoDecoder * decoder; //D3D11解码器对象。 ID3D11VideoContext * video_context; //D3D11视频上下文 D3D11_VIDEO_DECODER_CONFIG * cfg //D3D11配置用于...
  • 概述 在上一个教程中,我们为项目引入了照明。 现在我们将通过向我们的立方体添加纹理来构建它。 此外,我们将介绍常量缓冲区的概念,并...(SDK root)\Samples\C++\Direct3D11\Tutorials\Tutorial07 Github 纹...
  • From msdnDirect2D 和 Direct3D 互操作性概述 硬件加速的二维和三维图形越来越多地出现在非游戏型应用程序中,而且大多数游戏应用程序以菜单和抬头显示器 (HUD) 的形式使用二维图形。因此,使传统的二维呈现方式与 ...
  • Direct3D主要用来开启硬件加速功能来绘制3D场景,它可以看做是应用程序和图形设备(3D硬件)交互的中介: Application为应用程序;Direct3D为硬件定义好的、由Direct3D提供给应用程序的接口和函数。这些接口和函数...
  • Direct3D初始化

    2017-04-05 11:24:55
    在DirectX Math中,向量的核心数据类型为 XMVECTOR,使用了SIMD指令集加速。 下面引用百度对SIMD的介绍: Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组...
  • Direct3D (D3D):这是微软为提高3D 游戏在Win 95/98中的显示性能而开发的显示程序。这个基于显示光栅加速引擎非常强大和复杂,它在显示满屏状态,提供多边形计算、贴图场景等优化能力。由于其只能在满屏提供优化能力...
  • direct3D和directX是一回事吗?

    千次阅读 2016-08-29 21:04:06
    显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 217
精华内容 86
关键字:

direct3d加速