EWSEntryPoint

Basic Tutorial that shows step-by-step how to initialise OpenGL ES 2.0, use it for drawing a triangle and terminate it.

 /*!*********************************************************************************************************************
 \File         OpenGLESHelloAPI_EWS.cpp
 \Title        OpenGL ES 2.0 HelloAPI Tutorial
 \Author       PowerVR by Imagination, Developer Technology Team
 \Copyright    Copyright (c) Imagination Technologies Limited.
 \brief  Basic Tutorial that shows step-by-step how to initialise OpenGL ES 2.0, use it for drawing a triangle and terminate it.
 			  Entry Point: main
 ***********************************************************************************************************************/
 
 #include <stdio.h>
 
 #include "OpenGLESHelloAPI.h"
 
 #include <EWS/ews.h>
 
 /*!*********************************************************************************************************************
 \param[out]		nativeWindow			    Native window type to create
 \param[out]		nativeDisplay			    Native display to create
 \return		Whether the function succeeded or not.
 \brief	Creates a native window and display for the application to render into.
 ***********************************************************************************************************************/
 bool CreateWindowAndDisplay(EWS_WINDOW& nativeWindow, EWS_DISPLAY& nativeDisplay, SurfaceData surfaceData)
 {

Open the display for use.

 	nativeDisplay = EWSOpenDisplay(EWS_DEFAULT_DISPLAY, 0);
 

Set the position of the window to create.

 	EWS_COORD windowPosition;
 	windowPosition.iX = 0;
 	windowPosition.iY = 0;
 

Set the size of the window to create.

 	EWS_SIZE windowSize;
 	windowSize.uiHeight = surfaceData.width;
 	windowSize.uiWidth = surfaceData.height;
 

Create the native window.

 	nativeWindow = EWSCreateWindow(nativeDisplay, windowPosition, windowSize, EWS_PIXEL_FORMAT_ARGB_8888, EWS_ROTATE_0);
 
 	return true;
 }
 
 /*!*********************************************************************************************************************
 \param[in]			nativeDisplay               The native display to release
 \param[in]			nativeWindow                The native window to destroy
 \brief	Releases all resources allocated by the windowing system
 ***********************************************************************************************************************/
 void ReleaseWindowAndDisplay(EWS_WINDOW nativeWindow, EWS_DISPLAY nativeDisplay)
 {

Destroy the window.

 	if (nativeWindow)
 	{
 		EWSDestroyWindow(nativeWindow);
 	}
 

Release the native display.

 	if (nativeDisplay)
 	{
 		EWSCloseDisplay(nativeDisplay);
 	}
 }
 
 /*!*********************************************************************************************************************
 \param[in]	argc                        Number of arguments passed to the application, ignored.
 \param[in]	argv                        Command line strings passed to the application, ignored.
 \return		Result code to send to the Operating System
 \brief	Main function of the program, executes other functions.
 ***********************************************************************************************************************/
 int main(int /*argc*/, char** /*argv*/)
 {

Windows variables.

 	EWS_WINDOW nativeWindow = 0;
 	EWS_DISPLAY nativeDisplay = 0;
 
 	OpenGLESAPI helloAPI;
 

Setup the windowing system, getting a window and a display.

 	CreateWindowAndDisplay(nativeWindow, nativeDisplay, helloAPI._surfaceData);
 
 	helloAPI._surfaceData.deviceContext = (EGLNativeDisplayType)nativeDisplay;
 	helloAPI._surfaceData.window = (EGLNativeWindowType)nativeWindow;
 
 	helloAPI.initializeEGL();
 	helloAPI.initializeGLES();
 

Renders a triangle for 800 frames using the state setup in the previous function.

 	for (int i = 0; i < 800; ++i)
 	{
 		if (!helloAPI.drawFrame() || !helloAPI.swapEGLBuffers())
 		{
 			break;
 		}
 	}
 

Release the EGL State and OpenGL ES objects.

 	helloAPI.releaseGLState();
 	helloAPI.releaseEGLState();
 

Release the windowing system resources.

 	ReleaseWindowAndDisplay(nativeWindow, nativeDisplay);
 

Destroy the eglWindow.

 	return 0;
 }