Method and apparatus for implementing a glow characteristic on graphics objects within multiple graphics library environments

A method and apparatus are disclosed for implementing a glow characteristic on part or all of a graphics object within a plurality of different graphics library environments. The glow characteristic is implemented by a client application utilizing a graphics library and drawing to no more than one frame buffer at a time. The same glow characteristic can be rendered on client devices utilizing different graphics libraries.

TECHNICAL FIELD

A method and apparatus are disclosed for implementing a glow characteristic on part or all of a graphics object within any of a plurality of different graphics library environments.

BACKGROUND OF THE INVENTION

Graphics technology is continually evolving. Typically, a computing device executes software using a central processing unit (CPU) or a graphics processing unit (GPU) to generate graphics on a display of the computing device. The software often utilizes functionality made available to the software by a graphics library. A graphics library is a program library designed to aid in rendering computer graphics to a display and typically provides functions for a variety of rendering tasks.

Graphics libraries themselves are continually evolving. For instance, there are dozens of versions of the open source graphics library OpenGL in use today. The functionality contained in OpenGL varies from version to version. For example, the version known as OpenGL ES 3.0 introduced the ability to make part or all of an object glow.

An example of a prior art system implementing a glow feature using OpenGL ES 3.0 will now be described.

FIG. 1depicts hardware components of client device100, which is a computing device such as a smartphone, notebook computer, tablet, desktop computer, gaming unit, wearable computing device such as a watch or glasses, or any other computing device. These hardware components are known in the prior art. Client device100is a computing device that comprises processing unit110, memory120, non-volatile storage130, positioning unit140, network interface150, image capture unit160, graphics processing unit170, and display180.

Processing unit110optionally comprises a microprocessor with one or more processing cores. Memory120optionally comprises DRAM or SRAM volatile memory. Non-volatile storage130optionally comprises a hard disk drive or flash memory array. Positioning unit140optionally comprises a GPS unit or GNSS unit that communicates with GPS or GNSS satellites to determine latitude and longitude coordinates for client device100, usually output as latitude data and longitude data. Network interface150optionally comprises a wired interface (e.g., Ethernet interface) or wireless interface (e.g., 3G, 4G, 5G, GSM, 802.11, protocol known by the trademark BLUETOOTH, etc.). Image capture unit160optionally comprises one or more standard cameras (as is currently found on most smartphones and notebook computers). Graphics processing unit170optionally comprises a controller or processor for generating graphics for display. Display180displays the graphics generated by graphics processing unit170, and optionally comprises a monitor, touchscreen, or other type of display.

FIG. 2depicts software components of client device100. Client device100comprises operating system210(such as the operating systems known by the trademarks WINDOWS, LINUX, ANDROID, IOS, or other operating system), graphics library220(such as OpenGL ES 3.0), and prior art client application230. Prior art client application230comprises lines of software code executed by processing unit110and/or graphics processing unit. Prior art client application230utilizes graphics library220, which here is OpenGL ES 3.0.

FIGS. 3A, 3B, 3C, 3D, and 4depict an example of the steps taken by prior art client application230utilizing OpenGL ES 3.0 to make part of an object glow.

FIG. 3Adepicts object300, which comprises object301, object302, and object303. Objects301,302, and303can be considered to be sub-objects of object300. Object300is stored in application memory305, which is a portion of memory120managed by prior art client application230. Object300has not yet been drawn into a frame buffer or rendered on display180. A frame buffer is a portion of memory120(or other memory in client device100) containing pixels to be rendered on display180. Notably, in OpenGL ES 3.0, up to four frame buffers can be drawn to concurrently to contain elements for the same state that is to be rendered in an upcoming frame. In this example, prior art client application230wishes to make objects301and303glow but not object302. Here, objects301and302are opaque, and object303is transparent. Thus, part of object302(shown in a dotted line segment) is slightly, but not completely, obfuscated by object303.

InFIG. 3B, prior art client application230, utilizing the OpenGL ES 3.0 library, then draws objects301and303into frame buffer311as object310. Optionally, object310can be drawn in a different color than objects301and303inFIG. 3A. Object310is the portion of object300that prior art client application230wishes to glow.

InFIG. 3C, prior art client application230, utilizing the OpenGL ES 3.0 library, performs a BLUR function on object310and draws the resulting blurred object320into frame buffer321, which is a different frame buffer than frame buffer311.

InFIG. 3D, prior art client application330, utilizing the OpenGL ES 3.0 library, then adds object300and blurred object320together and draws the resulting object, object330, in frame buffer331, which is a different frame buffer than frame buffers311and321. Thus, it can be seen that object330contains a blurred version of object300, where objects301and303have been blurred but object302has not been blurred.

This glow feature of OpenGL ES 3.0 is a useful feature for software developers and users, and it enhances the graphics that can be generated by computing devices that support OpenGL ES 3.0. However, many computing devices use a graphics library other than OpenGL ES 3.0 and do not support the functions described above with reference toFIGS. 3A, 3B, 3C, 3D, and 4. Specifically, older versions of OpenGL allow for drawing to only one frame buffer at a time. This means that the sequence depicted inFIGS. 3A, 3B, 3C, 3D, and 4cannot be performed in such versions. This is problematic, because users of such computing devices will be unable to view images that were intended to be rendered with a glow if prior art client application230was developed based on the assumption that it would be executed by a computing device that utilizes OpenGL ES 3.0 or a version with similar features.

What is needed is an apparatus and method that enable computing devices to add a glow to part or all of a graphics object regardless of which graphics library the computing device is utilizing.

SUMMARY OF THE INVENTION

A method and apparatus are disclosed for implementing a glow characteristic on part or all of a graphics object within a plurality of different graphics library environments. The glow characteristic is implemented by a client application utilizing a graphics library and drawing to no more than one frame buffer at a time. The same glow characteristic can be rendered on client devices utilizing different graphics libraries.

DETAILED DESCRIPTIONS OF THE PREFERRED EMBODIMENTS

FIG. 5depicts software components of client device100according to the embodiments of the present invention. Client device100comprises operating system210, graphics library220, and client application530. Client application530comprises lines of software code executed by processing unit110and/or graphics processing unit170to perform the functions described below. For example, client device100can be a smartphone sold with the trademark “GALAXY” by Samsung or “IPHONE” by Apple, and client application530can be a downloadable app installed on the smartphone or a browser running code obtained from server600(described below). Client device100also can be a notebook computer, desktop computer, game system, or other computing device, and client application530can be a software application running on client device100or a browser on client device100running code obtained from server600. Client application530forms an important component of the inventive aspect of the embodiments described herein, and client application530is not known in the prior art.

FIG. 6depicts hardware components of server600. These hardware components are known in the prior art. Server600is a computing device that comprises processing unit610, memory620, non-volatile storage630, positioning unit640, network interface650, image capture unit660, graphics processing unit670, and display680.

Processing unit610optionally comprises a microprocessor with one or more processing cores. Memory620optionally comprises DRAM or SRAM volatile memory. Non-volatile storage630optionally comprises a hard disk drive or flash memory array. Positioning unit640optionally comprises a GPS unit or GNSS unit that communicates with GPS or GNSS satellites to determine latitude and longitude coordinates for server600, usually output as latitude data and longitude data. Network interface650optionally comprises a wired interface (e.g., Ethernet interface) or wireless interface (e.g., 3G, 4G, 5G, GSM, 802.11, protocol known by the trademark “Bluetooth,” etc.). Image capture unit660optionally comprises one or more standard cameras (as is currently found on most smartphones and notebook computers). Graphics processing unit670optionally comprises a controller or processor for generating graphics for display. Display680displays the graphics generated by graphics processing unit670, and optionally comprises a monitor, touchscreen, or other type of display.

FIG. 7depicts software components of server600. Server600comprises operating system710(such as the server operating systems known by the trademarks “WINDOWS SERVER,” “MAC OS X SERVER,” “LINUX,” or others), graphics library220, and server application730. Server application730comprises lines of software code executed by processing unit610and/or graphics processing unit, and server application730is designed specifically to interact with client application530. Server application730forms an important component of the inventive aspect of the embodiments described herein, and server application730is not known in the prior art.

With reference toFIG. 8, three instantiations of client device100are shown, client devices100a,100b, and100c. These are exemplary devices, and it is to be understood that any number of different instantiations of client device100can be used. Client devices100a,100b, and100ceach communicate with server600using network interface150. In this example, client device100aoperates graphics library220a, client device100boperates graphics library220b, and client device100coperates graphics library220c. Graphics libraries220a,220b, and220care different libraries that have some commonalities but some differences as well. For example, each may support a set of APIs supported by each of them, but each of them may also support other sets of APIs that are not supported by either or both of the other libraries. As an example, graphics library220amight be OpenGL ES 2.0, graphics library220bmight be OpenGL ES 3.0, and graphics library200cmight be WebGL 1.0. Here, server600has access to, and is compatible with, graphics libraries220a,220b,220c, and possibly others.

FIG. 9depicts glow engine900. Glow engine900comprises lines of code within client application530or server application730. Glow engine900receives object901as an input and generates object902as an output, where a glow feature is added to part or all of object901to generate object902. Notably, glow engine900is not dependent upon any particular graphics library220being utilized by client device100or server600.

The operation of glow engine900will now be described with reference toFIGS. 10 to 19.FIG. 19depicts method1900for generating a glow feature in graphics object901, and various aspects of the method are also depicted inFIGS. 10 through 18.

FIG. 10depicts object901, which is generated by client application530and comprises object1001, object1002, and object1003(step1901inFIG. 19). Objects1001,1002, and1003can be considered sub-objects of object901. Object901is stored in application memory1010, which is a portion of memory120managed by client application530. In this example, objects1001and1002are opaque, and object1003is transparent. Client application530wishes to make objects1001and1003glow but not object1002.

InFIG. 11A, glow engine900generates depth data1110for all opaque objects in object901, which here are objects1001and1002(step1902inFIG. 19). Specifically, depth data1111is generated for object1001, and depth data1112is generated for object1002. Depth data1111and1112indicate the relative depth of each opaque object and can be expressed, for example, as a layer number, where the layers will be rendered in a certain order (e.g., from lowest number layer to highest number layer). Depth data1110(which comprises depth data1111and1112) is stored in application memory1010.

InFIG. 11B, glow engine900generates stencil data1120for all opaque objects, which here are objects1001and1002, and marks the opaque objects that are to be glowed, which here is object1001(step1902inFIG. 19). Stencil data1121is generated for object1001, and stencil data1122is generated for object1002. Stencil data1120(which comprises stencil data1121and stencil data1122) is stored in application memory1010.

InFIG. 12, glow engine900draws objects1001and1002into frame buffer1201as object1200, based upon stencil data1120, which essentially draws all opaque objects (step1903inFIG. 19). Here, stencil data1120acts as a mask that determines which objects become part of object1200.

InFIG. 13, glow engine900draws the portion of object901that is marked by stencil data1120into frame buffer1202, which here yields only object1001, which is the opaque object upon which the glow is to be added (step1904inFIG. 19).

InFIG. 15, glow engine900draws object1500to which the glow is to be added (step1906inFIG. 19), which includes opaque object1001and transparent object1003.

InFIG. 16, glow engine900performs a BLUR function on object1500to generate blurred object1600, which it places into frame buffer1205(step1907inFIG. 19).

InFIG. 17, glow engine900combines object1600with object1400to yield object902in frame buffer1206(step1908inFIG. 19). With reference again toFIG. 9, it can be seen that glow engine900has now generated object902, which is a blurred version of object901, where objects1001and1003have been blurred but object1002has not been blurred.

InFIG. 18, object1800(which is the rendered version of object902) is then rendered on display180of client device100(step1909inFIG. 19).

Notably, method1900and the related apparatus described above forFIGS. 10-19do not require writing to more than one frame buffer at a time. As a result, method1900and the related apparatus can be implemented on a wide variety of computing devices utilizing a wide variety of graphics libraries. The end result is that a glow feature can be applied to part or all of an object across many different platforms, including systems running versions of OpenGL ES that predate version 3.0.

References to the present invention herein are not intended to limit the scope of any claim or claim term, but instead merely make reference to one or more features that may be covered by one or more of the claims. Materials, processes and numerical examples described above are exemplary only, and should not be deemed to limit the claims. It should be noted that, as used herein, the terms “over” and “on” both inclusively include “directly on” (no intermediate materials, elements or space disposed there between) and “indirectly on” (intermediate materials, elements or space disposed there between). Likewise, the term “adjacent” includes “directly adjacent” (no intermediate materials, elements or space disposed there between) and “indirectly adjacent” (intermediate materials, elements or space disposed there between). For example, forming an element “over a substrate” can include forming the element directly on the substrate with no intermediate materials/elements there between, as well as forming the element indirectly on the substrate with one or more intermediate materials/elements there between.