7
\$\begingroup\$

According to OGLES specification, we have the following definition:

EGLSurface eglCreateWindowSurface(EGLDisplay display,
                                  EGLConfig config,
                                  NativeWindowType native_window,
                                  EGLint const * attrib_list)

More details, here: http://www.khronos.org/opengles/documentation/opengles1_0/html/eglCreateWindowSurface.html

And also by definition:

int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, 
                                         int32_t height, int32_t format);

More details, here: http://mobilepearls.com/labs/native-android-api

I am running Android Native App on OGLES 2 and debugging it in a Samsung Nexus device. For setting up the 3D scene graph environment, the following variables are defined:

struct android_app {
    ...
    ANativeWindow* window;
};
android_app* mApplication;
...
mApplication=&pApplication;

And to initialize the App, we run the commands in the code:

ANativeWindow_setBuffersGeometry(mApplication->window, 0, 0, lFormat);
mSurface = eglCreateWindowSurface(mDisplay, lConfig, 
                                  mApplication->window, NULL);

Funny to say is that, the command ANativeWindow_setBuffersGeometry behaves as expected and works fine according to its definition, accepting all the parameters sent to it. But the eglCreateWindowSurface does no accept the parameter mApplication->window, as it should accept according to its definition. Instead, it looks for the following input:

EGLNativeWindowType hWnd;
mSurface = eglCreateWindowSurface(mDisplay,lConfig,hWnd,NULL);

As an alternative, I considered to use instead:

NativeWindowType hWnd=android_createDisplaySurface();

But debugger says:

Function 'android_createDisplaySurface' could not be resolved

Is 'android_createDisplaySurface' compatible only for OGLES 1 and not for OGLES 2?

Can someone tell if there is a way to convert mApplication->window? In a way that the data from the android_app get accepted to the window surface?

\$\endgroup\$
0

1 Answer 1

3
\$\begingroup\$

Are you sure you are using egl.h header from Android NDK? In Android NDK EGLNativeWindowType is defined in eglplatform.h file (it is included from egl.h):

#elif defined(__ANDROID__) || defined(ANDROID)
#include <android/native_window.h>
...
typedef struct ANativeWindow*           EGLNativeWindowType;

As you can see EGLNativeWindowType has correct type - ANativeWindow*

\$\endgroup\$
4
  • \$\begingroup\$ If I use hWnd it does not complain, but the windowSurface does not work... I guess it expect to have the input instead from mApplication->window, which is initialized by android_app. But if I try to use mApplication->window as parameter for eglCreateWindowSurface, it complains that this parameter should be "unsigned long int". And this are my OGLES includes: <EGL/egl.h> <GLES/gl.h> <GLES/glext.h> <GLES2/gl2.h>. Any thoughts? \$\endgroup\$ Commented Apr 9, 2012 at 7:21
  • \$\begingroup\$ Something is wrong with your headers or includes. Even the official NDK sample (native-activity) uses window member of android_app structure for eglCreateWindowSurface argument (linke 101 of main.c file). At it works fine there. \$\endgroup\$ Commented Apr 9, 2012 at 17:11
  • \$\begingroup\$ @Martins... do you mean that "eglCreateWindowSurface(mDisplay, lConfig, mApplication->window, NULL)" should work with on complaints about the paramenter "mApplication->window"? \$\endgroup\$ Commented Apr 9, 2012 at 17:57
  • \$\begingroup\$ Yes, it should work fine (compile without any warnings or errors), if you use egl.h header from NDK and mApplication->window has ANativeWindow* type coming from android/native_window.h file. \$\endgroup\$ Commented Apr 9, 2012 at 18:16

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.