纹理对象和采样器对象->CUDA3.0&OpenGL3.3

  在OpenGL3.3中先加入了采样器对象( sampler object ),记得以前做OpenGL程序的时候,有时会遇到需要相同的纹理数据只是filter模式不同而已,但当时由于不支持多个不同属性集共享同一个纹理对象,因此必须分别建立2个不同的纹理对象(当然使多个纹理对象共享同一个pixel buffer来达到此目的),显得很笨拙和浪费。新加入的采样器对象就使这个工作变得容易且合乎逻辑和直觉的“美感”

一个采样器对象实际上时定义了诸如过滤,寻址模式等属性,但不包括纹理的宽度和高度。之所以这样也是想当然的,因为通常采样器可以为多个纹理对象共享,当这些纹理对象的纹理内存尺寸不同时也不会造成歧义。

 

使用过程大致如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pDXVAHDVP->VideoProcessBltHD 是 Direct3D 11 视频加速硬件 (DXVA-HD) 应用程序编程接口 (API) 的一部分,用于将视频帧从源数据复制到目标表面,并对其进行处理。 以下是 VideoProcessBltHD 的使用示例: ```c++ HRESULT hr = S_OK; ID3D11Texture2D* pSourceTexture = nullptr; // 源纹理 ID3D11Texture2D* pDestinationTexture = nullptr; // 目标纹理 DXVAHDDDI_STREAM_STATE_PRIVATE_DATA* pStreamStatePrivateData = nullptr; // 流状态私有数据 DXVAHD_STREAM_STATE_INPUT_DATA* pStreamStateInputData = nullptr; // 流状态输入数据 DXVAHD_STREAM_STATE_OUTPUT_DATA* pStreamStateOutputData = nullptr; // 流状态输出数据 DXVAHD_BLT_STATE* pBltState = nullptr; // BLT 状态 // 填充流状态私有数据、流状态输入数据和流状态输出数据 // 创建源纹理和目标纹理 // 创建 DXVA-HD Video Processor 对象 ID3D11VideoDevice* pVideoDevice = nullptr; // D3D11 Video 设备 ID3D11VideoContext* pVideoContext = nullptr; // D3D11 Video 上下文 DXVAHD_VPDESCRIPTOR vpDescriptor = {}; // VP 描述符 ID3D11VideoProcessor* pVideoProcessor = nullptr; // VP 对象 hr = pVideoDevice->CreateVideoProcessor(&vpDescriptor, pStreamStatePrivateData, D3D11_CREATE_DEVICE_VIDEO_PROCESSOR_REAL_TIME, &pVideoProcessor); // 创建 BLT 状态 DXVAHD_BLT_STATE_DESCRIPTION bltStateDesc = {}; // BLT 状态描述符 ID3D11VideoProcessorEnumerator* pEnum = nullptr; // VP 枚举器 hr = pVideoProcessor->GetVideoProcessorEnumerator(&pEnum); hr = pEnum->CreateVideoProcessorState(&bltStateDesc, &pBltState); // 调用 VideoProcessBltHD 处理帧 DXVAHD_STREAM_STATE_PRIVATE_DATA vpPrivateData = {}; // VP 私有数据 DXVAHD_STREAM_DATA streamData = {}; // 流数据 streamData.Enable = TRUE; streamData.OutputIndex = 0; streamData.PictureParameters = nullptr; streamData.Quality = DXVAHD_STREAM_QUALITY_NORMAL; streamData.StreamNumber = 0; streamData.StreamState = DXVAHD_STREAM_STATE_D3DFORMAT; streamData.pPrivateData = &vpPrivateData; streamData.PrivateDataSize = sizeof(DXVAHD_STREAM_STATE_PRIVATE_DATA); hr = pVideoProcessor->VideoProcessBltHD(pBltState, pStreamStateInputData, pStreamStateOutputData, &streamData); // 释放资源 pSourceTexture->Release(); pDestinationTexture->Release(); pStreamStatePrivateData->pData = nullptr; pStreamStatePrivateData->DataSize = 0; CoTaskMemFree(pStreamStatePrivateData); CoTaskMemFree(pStreamStateInputData); CoTaskMemFree(pStreamStateOutputData); pVideoProcessor->Release(); pEnum->Release(); pBltState->Release(); ``` 在上述代码中,我们首先创建了源纹理和目标纹理。然后使用 D3D11 Video 设备和上下文创建了 DXVA-HD Video Processor 对象,并创建了 BLT 状态。接着,我们填充了流状态私有数据、流状态输入数据和流状态输出数据,并调用 VideoProcessBltHD 处理帧。最后,释放了创建的资源。 请注意,此示例仅供参考。实际使用时,需要根据您的应用程序要求和环境进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值