POWERVR Insider FAQ


1. What is OpenGL ES?
2. How do I get started with OpenGL ES development using the POWERVR SDK?
3. I can't find the driver files for my platform. Can you help?
4. What is this "shell" environment business anyway?
5. How do I use the PC Emulation SDK?
6. How can I improve performance of my application?
7. How do I use texture compression in my application?
8. I am getting depth accuracy issues in my OpenGL ES PocketPC application, how can I solve this?
9. I am getting "texture jittering" effects in my OpenGL ES PocketPC application, how can I solve this?
10. How do I dynamically update the contents of textures?
11. How do I play sound/implement network code/etc. on a particular platform?
12. I need technical support, what do I do?
13. How do I create and use vertex programs?
14. Error Message - "The procedure entry point glGetString could not be located in the dynamic link library libgles_cm.dll"

Q. What is OpenGL ES?

A. OpenGL.® ES is a royalty-free, cross-platform API for full-function 2D and 3D graphics on embedded systems - including handheld devices, appliances and vehicles. It is a well-defined subset of desktop OpenGL, creating a flexible and powerful low-level interface between software and graphics acceleration. OpenGL ES includes Common and Common-Lite profiles for floating-point and fixed-point systems and the specification for portably binding to native windowing systems. OpenGL ES 1.1 emphasizes hardware acceleration of the API, while OpenGL ES 1.0 focuses on enabling software-only implementations. OpenGL ES 1.1 is fully backwards compatible with 1.0 - enabling easy porting of applications between the two versions of the API.

For more information about OpenGL ES please go to www.khronos.org.

Q. How do I get started with OpenGL ES development using the POWERVR SDK?

A. If you own embedded hardware or a development platform supported by one of the POWERVR OpenGL ES SDKs you can download the corresponding SDK and immediately get started with it (the list of supported hardware is mentioned next to the SDK name).

Note that more SDKs may be available for registered developers. In the absence of hardware the OpenGL ES PC Emulation SDK can be used since it allows the writing of OpenGL ES applications on your Windows XP-based desktop PC. For more information about the PC Emulation SDK please read the OGLESPCViewer usage guide document in the SDK.

Regardless of whether hardware is available it is generally a good idea to start developing new OpenGL ES applications using the OpenGL ES PC Emulation SDK as it allows for rapid build time as well as convenient debugging facilities. Once an application runs as it should on the PC Emulation SDK it can be ported to the target platform by only changing the "shell initialization" file (see question below "what is this shell environment business anyway?").

You should then proceed to perform platform-dependant optimizations in your application. To start coding an OpenGL ES application it is advised to start with a simple SDK demo project and modify it as required. Examples of such demos are: OGLESVase, OGLESSkyBox or OGLESPolyBump.

Q. I can't find the driver files (such as libgles_cm.lib, libgles_cl.lib, libEGL.lib, libOpenVG.lib, libGLESv2x.lib, libGLES_CM.so, libIMGegl.so and/or libsrv.so) for my platform. Can you help?

A. Imagination Technologies does not distribute platform specific driver files with the SDK Packages. The driver files should be provided as part of your hardware support package for your development board, please contact your hardware supplier to obtain these files.

If you are using an end-user product please download and install the SDK package provided by the manufacturer of your device (linked to in the POWERVR Insider SDK download section), this SDK package will contain the required development files. Actual driver files for end-user products should already be present on the device itself but might be hidden from the user.

Q. What is this "Shell" environment business anyway?

A. The SDK applications are structured according to the following setup: PVRShell.cpp, PVRShell.h Generic source and header code that handles OS-independent initialization. PVRShellAPI.cpp API-specific shell initialization code, e.g. Shell\API\KEGL\PVRShellAPI.cpp performs initialization for the Khronos EGL API, used for both OpenGL ES and OpenVG.

PVRShellOS.cpp OS-specific shell initialization code, e.g. Shell\OS\Windows\PVRShellOS.cpp performs initialization for Windows (used for PC Emulation) and WinCE/PocketPC OSs. OGLES .cpp Source code containing the actual OpenGL ES rendering functions for the demo, e.g. OGLESVase. Other demo-specific files can of course be added as required.

This system allows a single OpenGL ES piece of code on run on different combinations of OSs and platforms by only having to change the shell initialization file. This allows programmers to develop on the PC Emulation SDK and then run their application on the desired platform by simply swapping the OS-specific initialization file in their projects. In the particular case of PocketPC and WinCE platforms this is not even necessary as the initialization file used for PC Emulation and those OSs is the same.

Q. How do I use the PC Emulation SDK?

A. For information as to how to use the PC Emulation SDK please read the OGLESPCViewer usage guide document in the SDK itself.

Q. How can I improve performance of my application?

A. The Reference Driver.User Guide.doc document in the SDK's Documentation section provides advice and performance tips to optimize OpenGL ES applications running on POWERVR MBX-enabled platforms.

Q. How do I use texture compression in my application?

A. It is important that your application uses compressed textures since they allow for reduced memory footprint, better performance, larger textures, and better power consumption. Most SDK demos use the PVRTC texture compression format that is supported by all POWERVR MBX platforms. The POWERVR SDK provides texture tool utilities that export texture data in PVRTC format, as well as a texture tool library (.lib for Windows, .a for Linux) that can be used for inclusion onto custom tools chains.

For more information on PVRTextureTool please read the document included in the PVRTextureTool package. Resulting PVRTC texture data can be read as external files (.pvr format) or included into an executable as a .h file. SDK demos like OGLESSkyBox or OGLESVase give examples how to read such texture data.

Q. I am getting depth accuracy issues in my OpenGL ES PocketPC application, how can I solve this?

A. It is important to remember that most of the depth sorting accuracy used in a scene is a direct factor of the front clip plane value used when setting the projection matrix. The larger this value, the better the depth accuracy. Always push the front clip plane value as high as you can to improve depth accuracy and eliminate "Z-fighting".

Also, it is usually a good idea to invert the depth range with glDepthRange{xf}(1, 0). To do this properly, the depth test function and depth clear value need to be changed accordingly, i.e. use glDepthFunc(GL_GEQUAL) and glClearDepth{xf}(0).

Q. I am getting "texture jittering" effects in my OpenGL ES application, how can I solve this?

A. Because of the limited precision of fixed-point calculations the current version of PocketPC drivers may cause "texture jittering" (or "shimmering") artefacts to occur on larger models. To fix this problem it is advised to scale down all the models used to a suitable size. You may need to adjust your front clip plane value accordingly.

Q. I need to dynamically update the contents of textures, how do I do this?

A. In general updating the contents of a texture that's already been used in a frame is discouraged as it will reduce performance. Whenever possible load all texture data up-front at load-time. Loading new texture contents dynamically should be done by creating brand new textures, or replacing the full contents of a texture at maximum a single time per frame (i.e. using the glTexImage2D() API rather than glSubTexImage2D()).

Q. How do I play sound/implement network code/etc. on a particular platform?

A. The POWERVR SDK does not cover those topics and is solely based on the graphics aspect of programming POWERVR MBX-enabled platforms. Other resources should be consulted to deal with those topics (e.g. www.pocketmatrix.com for PocketPC programming resources).

Q. I need technical support, what do I do?

A. The POWERVR Developer programme is open to professional developers that write applications on POWERVR MBX-enabled platforms. To register please fill in this form. We will get back to you after reviewing your application. If you are a registered developer we encourage you to send us versions of your application for early feedback. The POWERVR Developer Relations team can provide secure FTP access for file transfers. The e-mail address for registered developer support is devrel@powervr.com.

Q. How do I create and use vertex programs?

A. POWERVR MBX hardware with VGP support expose a feature called vertex programs, in which the OpenGL ES fixed-function transform and lighting pipeline is replaced by vertex programs allowing custom operations to be applied to all vertices. Vertex program compilation is done off-line through the VGP Compiler provided in the Utilities section of the POWERVR SDK. The VGP compiler outputs binary code corresponding to the vertex programs created in .h file format. For examples of how to use vertex programs within an OpenGL ES application please check the OGLESMouse, OGLESChameleonMan or OGLESPhantomMask SDK demos.

Q. Why am I getting the following error message when running one of the samples compiled for PC emulation "The procedure entry point glGetString could not be located in the dynamic link library libgles_cm.dll"?

A. This error occurs when incorrect versions of the PC Viewer libraries (libgles_cm.dll or libgles_cl.dll) are used. Always ensure that the PC Viewer libraries you use match the version of the OpenGL ES SDK installed. For instance if the OpenGL ES 1.1 PC Emulation SDK is installed ensure that the PC Viewer files for OpenGL ES 1.1 are referenced. Similarly when using the OpenGL ES 1.0 PC Emulation SDK the PC Viewer files for OpenGL ES 1.0 must be used. This problem exists because the calling convention of OpenGL ES entry points have been changed between OpenGL ES 1.0 and 1.1 header files.

Q. When building an SDK demo for PC Emulation using Microsoft Visual C++ 6.0 I get a lot of link errors coming from the Tools modules. How can I fix this?

A. The OpenGL ES Tools library (OGLESTools.lib) in the SDK is built with the Microsoft Visual C++.NET 2003 compiler. Those link errors are due to incompatibilities between the compiler used to build your application (Microsoft Visual C++ 6.0) and the OGLESTools.lib binary generated by Visual C++.NET 2003. To remedy the problem, re-build the OpenGL ES Tools library with your own Visual C++ 6.0 compiler.

Q. I am trying to use the PVR MAX Export plugin with 3ds Max 8, but it tells me that "PVRMAXExport.dle is not made for this version of the program". What am I doing wrong?

A. There is a bug in 3ds Max 8 that prevents the plugin from working correctly. To fix this problem you need to install Service Pack 1 for 3ds Max 8.

Join POWERVR Insider