CN110489083B - 一种纹理共享的方法、计算机设备和存储介质 - Google Patents

一种纹理共享的方法、计算机设备和存储介质 Download PDF

Info

Publication number
CN110489083B
CN110489083B CN201810457754.8A CN201810457754A CN110489083B CN 110489083 B CN110489083 B CN 110489083B CN 201810457754 A CN201810457754 A CN 201810457754A CN 110489083 B CN110489083 B CN 110489083B
Authority
CN
China
Prior art keywords
texture
shared
creating
opengl
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810457754.8A
Other languages
English (en)
Other versions
CN110489083A (zh
Inventor
杨亮
张文明
陈少杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810457754.8A priority Critical patent/CN110489083B/zh
Publication of CN110489083A publication Critical patent/CN110489083A/zh
Application granted granted Critical
Publication of CN110489083B publication Critical patent/CN110489083B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)

Abstract

本发明提供了一种纹理共享方法、计算机设备和存储介质,该方法包括:创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGL ES绘制所述共享纹理中的图像信息。可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。

Description

一种纹理共享的方法、计算机设备和存储介质
技术领域
本发明属于计算机技术领域,尤其涉及一种纹理共享的方法、计算机设备和存储介质。
背景技术
在Windows操作系统的图形渲染API(Application Programming Interface,应用程序编程接口)中,有OpenGL(Open Graphics Library,开放式图形库)与D3D(Direct3D)。其中OpenGL又分为桌面版本与移动嵌入式版本,其中桌面版本在Windows上称之为WGL(Windows OpenGL),而移动嵌入式版本OpenGL ES(OpenGL for Embedded Systems,嵌入式系统OpenGL)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。Direct3D根据其主版本的不同,又分为Direct3D9,Direct3D10,Direct3D11以及Direct3D12等。
在大多桌面版本的OpenGL中,不支持NV_DX_Interop扩展,在用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中,这将是一个非常大的开销,必然会极大的影响程序的运行效率。
发明内容
本申请实施例通过提供一种纹理共享的方法、计算机设备和存储介质,可以实现OpenGL ES与Direct3D9的纹理共享,解决了现有技术中,桌面版本的OpenGL不支持NV_DX_Interop扩展,在用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
第一方面,本申请提供了一种纹理共享方法,其特征在于,所述方法包括:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
可选的,所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄,包括:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄。
可选的,所述基于所述共享纹理句柄创建Direct3D9共享纹理,包括:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理。
可选的,在所述共享纹理创建函数中写入纹理的尺寸信息与所述纹理结构中设置的纹理的尺寸信息一致。
第二方面,本申请提供了一种纹理共享装置,其特征在于,所述装置包括:
第一初始化单元,用于创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
第二初始化单元,用于基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
获取单元,用于通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
绘制单元,用于通过所述OpenGL ES绘制所述共享纹理中的图像信息。
可选的,所述第一初始化单元具体用于:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄。
可选的,所述第二初始化单元具体用于:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理。
可选的,在所述共享纹理创建函数中写入纹理的尺寸信息与所述纹理结构中设置的纹理的尺寸信息一致。
第三方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
第四方面,本申请提供了一种计算机设备,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
可见,本申请通过创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGL ES绘制所述共享纹理中的图像信息。可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
附图说明
图1为本申请实施例中提供的纹理共享方法的流程图;
图2为本申请实施例中提供的纹理共享装置的结构示意图;
图3为本申请实施例中提供的计算机可读存储介质的结构示意图;
图4为本申请实施例中提供的计算机设备的结构示意图。
具体实施方式
本申请实施例提供了一种纹理共享方法、计算机设备和存储介质,可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
在Windows操作系统的图形渲染API中,有OpenGL与D3D,OpenGL又分为桌面版本与移动嵌入式版本,其中桌面版本在Windows上称之为WGL,而移动嵌入式版本OpenGL ES是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。Direct3DDirect 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectXSDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。根据其主版本的不同,又分为Direct3D9,Direct3D10,Direct3D11以及Direct3D12等。EGL是图形渲染API,是OpenGL ES和底层Native平台视窗系统之间的接口,保证了OpenGL ES的平台独立性。EGL提供了若干功能:创建rendering surface、创建graphics context、同步应用程序和本地平台渲染API、提供对显示设备的访问、提供对渲染配置的管理等。在基于OpenGL ES下,提出了ANGLE(Almost Native Graphic Layer Engine,几乎本地图形层引擎)的概念,也就是利用本地Direct3D的接口,来实现OpenGL的接口函数。那么基于ANGLE的EGL实现,虽然在使用的时候调用的是OpenGL的标准接口,但是其内部实现却是Direct3D。那么基于这一特性,本实施例可以实现EGL与Direct3D9的纹理互操作在不支持WGL_NV_Interop扩展的WGL中进行。可以理解的是,本申请实施例使用的函数名称或变量名称等,并不用于限定本申请,在一些其他可能的实现方式中,也可以使用其他命名方式。
本申请实施例的技术方案为解决上述技术问题,总体思路如下:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
可见,本申请实施例通过创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGLES绘制所述共享纹理中的图像信息。可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,就必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
为了更好的理解上述技术方案,以下结合附图以及具体实施例,对上述技术方案进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一:
请参阅图1,本实施例提供的一种纹理共享方法包括以下步骤:
S101、创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
本实施例中,使用OpenGL的移动嵌入式版本OpenGL ES进行图像绘制,而EGL是OpenGL ES和底层Native平台视窗系统之间的接口。在EGL的使用中,必须先初始化EGL,首先创建EGLDisplay显示结构,然后根据EGLDisplay显示结构创建EGLConfig配置结构,然后根据这两个结构以及相关的参数,创建一个EGLSurface纹理结构。具体的,创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄的步骤包括:
(1)创建OpenGL ES显示结构EGLDisplay;
EGLDisplay是一个关联系统物理屏幕的通用数据类型。对于PC来说,Display就是显示器的句柄。不管是嵌入式系统或PC,都可能有多个物理显示设备。为了使用系统的显示设备,EGL提供了EGLDisplay数据类型,以及一组操作设备显示的API。
因为本实施例需要与Direct3D9进行互操作,所以创建的EGLDisplay必须是基于Direct3D9实现的。具体的步骤如下:
a.获取eglGetPlatformDisplayEXT扩展,通过调用EGL的eglGetProcAddress函数,将eglGetPlatformDisplayEXT字符串传入到该函数中,从而获取到eglGetPlatformDisplayEXT函数的地址;
b.调用eglGetPlatformDisplayEXT函数创建EGLDisplay显示结构,具体为根据获取到的eglGetPlatformDisplayEXT函数地址,调用该函数创建EGLDisplay显示结构。其中,在调用该函数时,将EGL_PLATFORM_ANGLE_ANGLE传入到该函数的第一个参数中,所述EGL_PLATFORM_ANGLE_ANGLE为EGL的硬件平台,将EGL_DEFAULT_DISPLAY传入到该函数的第二个参数中,所述EGL_DEFAULT_DISPLAY为默认的显示器,将该函数的第三个参数中设置为一个以EGL_NONE结尾的整型数组,并且在该数组中包含以EGL_PLATFORM_ANGLE_TYPE_ANGLE为键,以EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE为值的键值对。如果该函数调用成功,那么将返回一个EGLDisplay显示结构。
(2)创建OpenGL ES配置结构EGLConfig;
EGLConfig配置结构是一个用来描述EGL surface配置信息的数据类型。要获取正确的渲染结果,Surface的格式是非常重要的。
基于上述步骤创建的EGLDisplay显示结构,可以创建一个EGLConfig配置结构。具体的,可以通过调用eglChooseConfig函数创建EGLConfig配置结构。由于在EGL中存在三种不同类型的EGLSurface,一是Window Surface,即前台纹理,跟具体的物理显示设备绑定,例如Windows系统上的窗口句柄;二是PBuffer Surface,即位于显存中的后台纹理;三是Pixmap Surface,即位于系统内存中的位图纹理,由于本实施例中所需要的纹理,是位于显存中的后台纹理,所以在调用eglChooseConfig创建EGLConfig配置结构时,必须同样提供一个以EGL_NONE结束的整型数组,并且该数组中必须包含以EGL_SURFACE_TYPE为键,以EGL_PBUFFER_BIT为值的键值对。调用完成之后,如果该函数调用成功,将获取到一个类型为EGLConfig的配置结构。
(3)创建OpenGL ES纹理结构EGLSurface;
Surface实际上就是一个FrameBuffer(帧缓冲),获取到EGLConfig配置结构之后,可以调用eglCreatePbufferSurface接口来创建一个EGLSurface后台纹理。其中在调用eglCreatePbufferSurface接口时,将所述EGLDisplay显示结构传入到该函数的第一个参数中,将所述EGLConfig配置结构传入到该函数的第二个参数中,并且在该函数的第三个参数中,同样提供一个以EGL_NONE结尾的整型数组,该数组中必须包含以EGL_WIDTH纹理宽度为键,具体纹理宽度值为值;以EGL_HEIGHT纹理高度为键,具体纹理高度为值;以EGL_TEXTURE_FORMAT为键,以EGL_TEXTURE_RGB为值;以EGL_TEXTURE_TARGET为键,以EGL_TEXTURE_2D为值的键值对信息。该函数调用成功之后,将获取到EGLSurface纹理结构。
(4)获取纹理结构EGLSurface的共享纹理句柄。
句柄是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息。句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。
具体的,获取所述EGLSurface纹理结构的共享纹理句柄,包括如下步骤:
a.获取eglQuerySurfacePointerANGLE扩展函数;
具体的,通过调用eglGetProcAddress,将eglQuerySurfacePointerANGLE字符串传入到扩展函数中,从而获取到eglQuerySurfacePointerANGLE扩展函数的地址。
b.调用eglQuerySurfacePointerANGLE获取共享纹理句柄。
根据获取到的eglQuerySurfacePointerANGLE扩展函数地址,调用扩展函数,并将创建的EGLDisplay显示结构传入到该函数第一个参数中,将创建的EGLSurface配置结构传入到该函数的第二个参数中,将EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE传入到该函数的第三个参数中,将该函数的第四个参数设置为用于接收共享纹理句柄值。该函数调用成功之后,将获取到所述EGLSurface纹理结构的共享纹理句柄。
S102、基于所述共享纹理句柄创建Direct3D9共享纹理;
具体的,基于所述共享纹理句柄创建Direct3D9共享纹理包括如下步骤:
(1)创建IDirect3D9Ex接口;
具体的,通过调用Direct3DCreate9Ex创建一个IDirect3D9Ex接口。所述IDirect3D9EX接口的方法可以用来创建微软Direct3D 9EX对象并设置环境。此接口包括枚举和检索设备功能的方法。
(2)创建IDirect3DDevice9Ex接口;
基于IDirect3D9Ex接口,调用所述IDirect3D9Ex接口的CreateDeviceEx方法,创建一个IDirect3DDevice9Ex的接口。所述IDirect3DDevice9Ex接口的方法可以用来渲染原语、创建资源、使用系统级变量工作、调整伽马斜坡级别、使用调色板和创建着色器。
(3)创建Direct3D9共享纹理IDirect3DTexture9;
所述Direct3D9共享纹理包括图像信息,在Direct3D9中,用IDirect3DTexture9类型的接口来代表一个二维的平面纹理,所述IDirect3DTexture9接口的方法可以用来操纵纹理资源。具体的,通过调用创建的IDirect3DDevice9Ex接口的CreateTexture方法,将要创建的纹理宽度值设置为该方法第一个参数,将要创建的纹理高度值设置为该方法第二个参数,其中,要创建的纹理的宽度值和纹理的高度值与所述EGLSurface纹理结构中设置的纹理的宽度值和纹理的高度值一致,将纹理层级值1设置到该方法的第三个参数中,将D3DUSAGE_RENDERTARGET值设置到该方法第四个参数中,将D3DPOOL_DEFAULT设置到该方法的第五个参数中,将第六个参数设置为用于接收要创建的IDirect3DTexture9接口,将第七个参数值设置为OpenGL ES纹理结构EGLSurface的共享纹理句柄。
S103、通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
由于纹理结构EGLSurface的共享纹理句柄同时也是Direct3D9共享纹理的参数,所以纹理结构EGLSurface与Direct3D9共享纹理指向了同一地址的显存,从而二者建立了共享的关系,OpenGL ES可以根据所述共享纹理句柄获取所述Direct3D9共享纹理。
S104、通过所述OpenGL ES绘制所述共享纹理中的图像信息。
Direct3D9共享纹理包括中包括图像信息,OpenGL ES从Direct3D9共享纹理绘制中获取到图像信息后,绘制所述图像信息,具体的,可以调用eglBindTexImage函数分别将EGLDisplay显示结构,EGLSurface配置结构以及EGL_BACK_BUFFER值,传入到该函数的三个参数中,从而完成图像的绘制。
可见,本实施例通过创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGL ES绘制所述共享纹理中的图像信息。可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
基于同一发明构思,本申请提供了一种纹理共享装置,详见图2,下面将结合图2对实施例二进行介绍。
实施例二:
请参阅图2,本实施例提供的纹理共享装置包括:
第一初始化单元201,用于创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
第二初始化单元202,用于基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
获取单元203,用于通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
绘制单元204,用于通过所述OpenGL ES绘制所述共享纹理中的图像信息。
可见,本实施例中,第一初始化单元201创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;第二初始化单元202基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;获取单元203通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;绘制单元204通过所述OpenGL ES绘制所述共享纹理中的图像信息。从而实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,就必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
本申请实施例二提供的纹理共享装置及本申请实施例一提供的纹理共享方法属于同一构思,其具体实现过程详见说明书全文,此处不再赘述。
基于同一发明构思,本申请提供了一种计算机可读存储介质,详见图3,下面将结合图3对实施例三进行介绍。
实施例三:
本实施例提供了一种计算机可读存储介质300,所述计算机可读存储介质300存储有计算机程序311,所述计算机程序311被处理器执行时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
本实施例中,计算机可读存储介质300中的计算机程序311被处理器执行时,可以创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGL ES绘制所述共享纹理中的图像信息。从而实现了OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
在具体实施过程中,该计算机程序311被处理器执行时,可以实现实施例一中任一实施方式,此处不再赘述。
基于同一发明构思,本申请还提供了一种计算机设备,详见图4,下面将结合图4对实施例四进行介绍。
实施例四:
本申请提供了一种计算机设备400,包括处理器420、存储器410以及存储在存储器410上并可在处理器420上运行的计算机程序411。其中,存储器410包括但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,Rom),可编程只读存储器(Programmable Read-Only-Memory,PROM),可擦除只读存储器(ErasableProgrammable Read-Only-Memory,EPROM),电可擦除只读存储器(Electric ErasableProgrammable Read-Only-Memory,EPROM,EEPROM)等。处理器420可能是一种集成电路芯片,具有信号的处理能力。也可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU),网络处理器(Network Processor,NP),还可以是数字信号处理器(DSP),专用集成电路(ASIC),现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。所述处理器420执行所述计算机程序411时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息。
本实施例中,计算机设备400创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGLES绘制所述共享纹理中的图像信息。可以实现OpenGL ES与Direct3D9的纹理共享,避免了由于桌面版本的OpenGL不支持NV_DX_Interop扩展,在使用OpenGL绘制IDirect3DTexture9纹理时,必须先把IDirect3DTexture9纹理中,位于显存中的图像内容拷贝到系统内存中导致的系统开销大,效率低下的问题。
需要说明的是,所述计算机设备包括但不限于手机、平板电脑、PDA(PersonalDigital Assistant,个人数字助理)、车载电脑、智能手表、台式电脑等设备。由于本实施例所介绍的计算机设备400为实施本申请实施例一中纹理共享方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的计算机设备400的具体实施方式以及其各种变化形式,所以在此对于该计算机设备400如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (6)

1.一种纹理共享方法,其特征在于,所述方法包括:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;通过所述OpenGL ES绘制所述共享纹理中的图像信息;
所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄,包括:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄;
所述基于所述共享纹理句柄创建Direct3D9共享纹理,包括:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理;
其中,所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄包括:获取eglGetPlatformDisplayEXT扩展,通过调用EGL的eglGetProcAddress函数,将eglGetPlatformDisplayEXT字符串传入到该函数中,从而获取到eglGetPlatformDisplayEXT函数的地址;调用eglGetPlatformDisplayEXT函数创建EGLDisplay显示结构,具体为根据获取到的eglGetPlatformDisplayEXT函数地址,调用该函数创建EGLDisplay显示结构。
2.如权利要求1所述的方法,其特征在于,在所述共享纹理创建函数中写入纹理的尺寸信息与所述纹理结构中设置的纹理的尺寸信息一致。
3.一种纹理共享装置,其特征在于,所述装置包括:
第一初始化单元,用于创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
第二初始化单元,用于基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
获取单元,用于通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
绘制单元,用于通过所述OpenGL ES绘制所述共享纹理中的图像信息;
所述第一初始化单元具体用于:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄;
所述第二初始化单元具体用于:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理;
其中,所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄包括:获取eglGetPlatformDisplayEXT扩展,通过调用EGL的eglGetProcAddress函数,将eglGetPlatformDisplayEXT字符串传入到该函数中,从而获取到eglGetPlatformDisplayEXT函数的地址;调用eglGetPlatformDisplayEXT函数创建EGLDisplay显示结构,具体为根据获取到的eglGetPlatformDisplayEXT函数地址,调用该函数创建EGLDisplay显示结构。
4.如权利要求3所述的装置,其特征在于,在所述共享纹理创建函数中写入纹理的尺寸信息与所述纹理结构中设置的纹理的尺寸信息一致。
5.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息;
所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄,包括:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄;
所述基于所述共享纹理句柄创建Direct3D9共享纹理,包括:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理;
其中,所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄包括:获取eglGetPlatformDisplayEXT扩展,通过调用EGL的eglGetProcAddress函数,将eglGetPlatformDisplayEXT字符串传入到该函数中,从而获取到eglGetPlatformDisplayEXT函数的地址;调用eglGetPlatformDisplayEXT函数创建EGLDisplay显示结构,具体为根据获取到的eglGetPlatformDisplayEXT函数地址,调用该函数创建EGLDisplay显示结构。
6.一种计算机设备,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄;
基于所述共享纹理句柄创建Direct3D9共享纹理,所述共享纹理包括图像信息;
通过所述OpenGL ES根据所述共享纹理句柄获取所述Direct3D9共享纹理;
通过所述OpenGL ES绘制所述共享纹理中的图像信息;
所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄,包括:
创建OpenGL ES显示结构,所述显示结构基于Direct3D9实现;
创建OpenGL ES配置结构,并在所述配置结构中设置纹理的类型;
基于所述显示结构和配置结构创建所述纹理结构,并在所述纹理结构中设置纹理的尺寸信息;
通过调用eglQuerySurfacePointerANGLE扩展函数获取所述纹理结构的共享纹理句柄;
所述基于所述共享纹理句柄创建Direct3D9共享纹理,包括:
调用共享纹理创建函数CreateTexture;
在所述共享纹理创建函数中写入纹理的尺寸信息、图像信息和所述共享纹理句柄,从而创建Direct3D9共享纹理;
其中,所述创建OpenGL ES纹理结构并获取所述纹理结构的共享纹理句柄包括:获取eglGetPlatformDisplayEXT扩展,通过调用EGL的eglGetProcAddress函数,将eglGetPlatformDisplayEXT字符串传入到该函数中,从而获取到eglGetPlatformDisplayEXT函数的地址;调用eglGetPlatformDisplayEXT函数创建EGLDisplay显示结构,具体为根据获取到的eglGetPlatformDisplayEXT函数地址,调用该函数创建EGLDisplay显示结构。
CN201810457754.8A 2018-05-14 2018-05-14 一种纹理共享的方法、计算机设备和存储介质 Active CN110489083B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810457754.8A CN110489083B (zh) 2018-05-14 2018-05-14 一种纹理共享的方法、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810457754.8A CN110489083B (zh) 2018-05-14 2018-05-14 一种纹理共享的方法、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN110489083A CN110489083A (zh) 2019-11-22
CN110489083B true CN110489083B (zh) 2022-06-21

Family

ID=68544867

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810457754.8A Active CN110489083B (zh) 2018-05-14 2018-05-14 一种纹理共享的方法、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN110489083B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6529201B1 (en) * 1999-08-19 2003-03-04 International Business Machines Corporation Method and apparatus for storing and accessing texture maps
CN102800122A (zh) * 2012-06-20 2012-11-28 广东威创视讯科技股份有限公司 基于Direct3D技术的图像处理方法及其装置
CN105302580A (zh) * 2015-11-28 2016-02-03 武汉斗鱼网络科技有限公司 一种通过gpu纹理共享实现快速获取游戏图像的方法和系统
CN105700887A (zh) * 2016-01-13 2016-06-22 广州市赛普电子科技有限公司 一种基于Directx11视口的内容共享系统及方法
CN106528303A (zh) * 2016-10-20 2017-03-22 武汉斗鱼网络科技有限公司 一种基于gpu纹理共享来获取d3d12游戏源图像的方法及系统
WO2017157179A1 (zh) * 2016-03-15 2017-09-21 阿里巴巴集团控股有限公司 创建纹理图集和纹理图集等待集合的方法、装置和设备
CN107203434A (zh) * 2017-06-22 2017-09-26 武汉斗鱼网络科技有限公司 一种纹理共享的方法、装置以及计算机可读存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8872823B2 (en) * 2009-10-09 2014-10-28 Microsoft Corporation Automatic real-time shader modification for texture fetch instrumentation
US9093006B2 (en) * 2011-06-30 2015-07-28 Google Inc. Image shader using style attribute references
US9092907B2 (en) * 2011-06-30 2015-07-28 Google Inc. Image shader using two-tiered lookup table for implementing style attribute references
EP2973423B1 (en) * 2013-03-15 2020-08-19 Robert Bosch GmbH System and method for display of a repeating texture stored in a texture atlas

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6529201B1 (en) * 1999-08-19 2003-03-04 International Business Machines Corporation Method and apparatus for storing and accessing texture maps
CN102800122A (zh) * 2012-06-20 2012-11-28 广东威创视讯科技股份有限公司 基于Direct3D技术的图像处理方法及其装置
CN105302580A (zh) * 2015-11-28 2016-02-03 武汉斗鱼网络科技有限公司 一种通过gpu纹理共享实现快速获取游戏图像的方法和系统
CN105700887A (zh) * 2016-01-13 2016-06-22 广州市赛普电子科技有限公司 一种基于Directx11视口的内容共享系统及方法
WO2017157179A1 (zh) * 2016-03-15 2017-09-21 阿里巴巴集团控股有限公司 创建纹理图集和纹理图集等待集合的方法、装置和设备
CN106528303A (zh) * 2016-10-20 2017-03-22 武汉斗鱼网络科技有限公司 一种基于gpu纹理共享来获取d3d12游戏源图像的方法及系统
CN107203434A (zh) * 2017-06-22 2017-09-26 武汉斗鱼网络科技有限公司 一种纹理共享的方法、装置以及计算机可读存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
EGL_ANGLE_surface_d3d_texture_2d_share_handle;daniel;《https://github.com/google/angle/blob/master/extensions/EGL_ANGLE_surface_d3d_texture_2d_share_handle.txt》;20120117;全文第1-3页 *
OpenGL ES绘制3D纹理贴图;warmor;《https://blog.csdn.net/wdong_love_cl/article/details/51378484》;20160511;全文第1-7页 *
shared-surface.cc;jrmuizel;《https://github.com/jrmuizel/d3d-tests/blob/master/shared-surface.cc》;20141022;全文第1-3页 *

Also Published As

Publication number Publication date
CN110489083A (zh) 2019-11-22

Similar Documents

Publication Publication Date Title
US9715750B2 (en) System and method for layering using tile-based renderers
AU2012280863B2 (en) Graphics rendering engine and implementation method thereof
CN108733356B (zh) 一种纹理共享方法、计算机设备和存储介质
US11908039B2 (en) Graphics rendering method and apparatus, and computer-readable storage medium
US20170285883A1 (en) User interface displaying and processing method and user interface displaying and processing device
CN108595284B (zh) 一种纹理共享方法、计算机设备和存储介质
CN105550973B (zh) 图形处理单元、图形处理系统及抗锯齿处理方法
US20170213394A1 (en) Environmentally mapped virtualization mechanism
CN111710020B (zh) 动画渲染方法和装置及存储介质
CN102915232A (zh) 一种3d控件的交互方法及通信终端
US20180276870A1 (en) System and method for mass-animating characters in animated sequences
CN109634611B (zh) 基于OpenGL的移动端三维模型ply文件解析与展示方法
CN114429513A (zh) 可见元素的确定方法和装置、存储介质及电子设备
CN110489083B (zh) 一种纹理共享的方法、计算机设备和存储介质
US10657705B2 (en) System and method for rendering shadows for a virtual environment
US8203567B2 (en) Graphics processing method and apparatus implementing window system
CN110766599B (zh) 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统
CN108845961B (zh) 一种创建顶点缓冲区方法、装置及可读存储介质
US20200242807A1 (en) Texture based pixel count determination
CN113487708B (zh) 基于图形学的流动动画实现方法、存储介质及终端设备
CN103955965A (zh) 基于OpenGL ES非固定管线矢量点显示方法和装置
CN113870411A (zh) 图片处理方法及装置
CN113313800A (zh) 基于纹理的像素数确定
CN116977537A (zh) 一种合批渲染方法、装置、设备及存储介质
CN118840468A (zh) 像素绘制量的确定方法、装置、设备、介质及程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant