SkeyePlayer渲染引擎D3DRender电子放大功能实现解决方案(附源码)

本文介绍了SkeyePlayer利用D3DRender渲染引擎实现电子放大功能的详细步骤,包括D3D设备创建、离屏表面绘制、数据填充以及电子放大功能的具体实现代码。通过离屏表面技术,可以方便地实现在视频中进行电子放大并展示缩略图。
摘要由CSDN通过智能技术生成

SkeyePlayer依靠D3DRender强大的渲染能力我们可以实现很多视频编辑功能,比如电子放大功能,本文将深入D3DRender渲染引擎库代码,重点讲述其如何采用surface离屏表面技术来实现渲染视频图像呈现,以实现在surface上做电子放大缩略图显示等功能。

1. D3DRender初始化D3D创建设备

首先,我们需要创建一个D3D9设备用于操作系统软硬件资源来为我们的视频渲染服务,这个代码很简单,按照Direct3D教程即可实现,如下代码所示:

	pD3D = Direct3DCreate9(D3D_SDK_VERSION);
	if (NULL == pD3D)
	{
		errCode = D3D_NOT_ENABLED;
		return false;
	}

	//获取显卡张数
	int adaptnum = pD3D->GetAdapterCount();
	//_TRACE("共[%d]张显卡.\n", adaptnum);

	//获取显卡支持的显示格式
	if (FAILED(pD3D->GetAdapterDisplayMode(nAdapterNo, &d3dDisplayMode )) )
	{
		__SAFE_RELEASE(pD3D);
		return false;
	}

	//_TRACE("显卡信息:   %d X %d\tRefreshRate: %d\tFormat: %d\n", d3dDisplayMode.Width, d3dDisplayMode.Height, d3dDisplayMode.RefreshRate, d3dDisplayMode.Format);

	if (FAILED(pD3D->CheckDeviceFormat(nAdapterNo, D3DDEVTYPE_HAL, d3dDisplayMode.Format, 0, D3DRTYPE_SURFACE, d3dFormat)))
	{
		_TRACE("CheckDeviceFormat 不支持指定的格式..\n");

		errCode	=	D3D_FORMAT_NOT_SUPPORT;
		__SAFE_RELEASE(pD3D);
		return false;
	}

	//检查输入格式到显示格式的转换是否支持
	if ( FAILED(pD3D->CheckDeviceFormatConversion(nAdapterNo, D3DDEVTYPE_HAL, d3dFormat,  d3dDisplayMode.Format) ) )
	{
		errCode	=	D3D_FORMAT_NOT_SUPPORT;
		__SAFE_RELEASE(pD3D);
		return false;
	}

	//检查是否支持硬件顶点渲染方式
	if ( FAILED(pD3D->GetDeviceCaps(nAdapterNo, D3DDEVTYPE_HAL,  &d3dCaps) ) )
	{
		errCode	=	D3D_VERTEX_HAL_NOT_SUPPORT;
		__SAFE_RELEASE(pD3D);
		return false;
	}

	//检测硬件是否支持变换和灯光
	INT vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

	if ( d3dCaps.DevCaps  &  D3DDEVCAPS_HWTRANSFORMANDLIGHT )
	{
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;		//硬件支持
	}
	else
	{
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;		//软件支持
	}
	memset(&d3dParameters, 0, sizeof(D3DPRESENT_PARAMETERS));

	D3DFORMAT	d3dFormatRender = D3DFMT_UNKNOWN;
	d3dParameters.Windowed			
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwordTwelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值