Skip to content

Commit b894aed

Browse files
Refactored Sample1
1 parent 0807408 commit b894aed

File tree

2 files changed

+105
-77
lines changed

2 files changed

+105
-77
lines changed

README-Dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ TODO Priority List:
66
- [self setupVideoFrameIntervalUpdates:0]; -> Sample1[85592:3303] *** -[__EAGLSurface setupVideoFrameIntervalUpdates:]: message sent to deallocated instance 0x8bab670
77
- Update Sample1 to recreate EGLContext on EGL_ONTEXT_LOST
88
- Memory Leak: App starts with 8.5Mb without EGL. Running the demo consumes more 16Mb. When the demo stops, the memory consumption is higher than 8.5Mb
9-
- eglMakeCurrent(EGLDisplay dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)
9+
- eglMakeCurrent(EGLDisplay dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) -> impact on ressource count
1010
- Add support for rotation ? Native Window Resizing
1111
- contentScaleFactor == 1 ? IN EAGL_eglCreateWindowSurface
1212

test/src/egl/Sample1Test.c

Lines changed: 104 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ struct renderer {
5656
InitRender_t init;
5757
RenderFrame_t renderFrame;
5858
DestroyRender_t destroy;
59+
EGLint renderableType;
60+
EGLint clientVersion;
5961
};
6062

6163
static struct renderer renderer = {0};
@@ -125,7 +127,7 @@ static int createSurface(struct renderer* renderer, void* nativeWinSurface) {
125127
return 1;
126128
}
127129

128-
static int initContext(struct renderer* renderer, EGLint clientVersion) {
130+
static int createContext(struct renderer* renderer, EGLint clientVersion) {
129131
LOG(I, "Initializing context")
130132
EGLint attribs[] = {
131133
EGL_CONTEXT_CLIENT_VERSION, clientVersion /* 1 or 2 or 3 */,
@@ -135,28 +137,40 @@ static int initContext(struct renderer* renderer, EGLint clientVersion) {
135137
renderer->destroy();
136138
return 0;
137139
}
138-
140+
141+
LOG(I, "Context initialized")
142+
return 1;
143+
}
144+
145+
static int setAsCurrent(struct renderer* renderer) {
146+
LOG(I, "Setting current context")
139147
if (!eglMakeCurrent(display, surface, surface, context)) {
140148
logEGLError( "eglMakeCurrent", eglGetError());
141149
renderer->destroy();
142150
return 0;
143151
}
144152

145-
LOG(I, "Context initialized")
153+
LOG(I, "Set current context")
146154
return 1;
147155
}
148156

149157
static int destroyContext () {
150-
eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
151158
eglDestroyContext(display, context);
159+
context = EGL_NO_CONTEXT;
160+
return 1;
161+
}
162+
163+
static int destroySurface () {
152164
eglDestroySurface(display, surface);
165+
surface = EGL_NO_SURFACE;
166+
return 1;
167+
}
168+
169+
static int destroyDisplay () {
153170
eglTerminate(display);
154171
eglReleaseThread();
155172

156173
display = EGL_NO_DISPLAY;
157-
surface = EGL_NO_SURFACE;
158-
context = EGL_NO_CONTEXT;
159-
160174
return 1;
161175
}
162176

@@ -223,32 +237,9 @@ static void renderFrameOpenGLES1()
223237

224238
static void destroyRenderOpenGLES1() {
225239
LOG(I, "Destroying OpenGL 1 context")
226-
227-
if (!destroyContext()) {
228-
229-
}
230-
return;
231240
}
232241

233242
static int initRenderOpenGLES1(TestPlatform* p, void* eglDisplay, void* nativeWinSurface) {
234-
setenv(p->ios_platform_env_key, p->ios_platform_env_value, 1);
235-
236-
if (!getAndInitDisplay(&renderer, p, eglDisplay)) {
237-
return 0;
238-
}
239-
240-
if (!chooseConfig(&renderer, EGL_OPENGL_ES_BIT)) {
241-
return 0;
242-
}
243-
244-
if (!createSurface(&renderer, nativeWinSurface)) {
245-
return 0;
246-
}
247-
248-
if (!initContext(&renderer,1)) {
249-
return 0;
250-
}
251-
252243
glDisable(GL_DITHER);
253244
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
254245
glClearColor(0, 0, 0, 0);
@@ -262,8 +253,6 @@ static int initRenderOpenGLES1(TestPlatform* p, void* eglDisplay, void* nativeWi
262253
glMatrixMode(GL_PROJECTION);
263254
glLoadIdentity();
264255
glFrustumf(-ratio, ratio, -1, 1, 1, 10);
265-
266-
LOG(I, "Context initialized")
267256
return 1;
268257
}
269258

@@ -653,31 +642,9 @@ static void renderFrameOpenGLES2()
653642

654643
static void destroyRenderOpenGLES2() {
655644
LOG(I, "Destroying OpenGL 2 context")
656-
657-
if (!destroyContext()) {
658-
659-
}
660-
return;
661645
}
662646

663647
static int initRenderOpenGLES2(TestPlatform* p, void* eglDisplay, void* nativeWinSurface) {
664-
665-
if (!getAndInitDisplay(&renderer, p, eglDisplay)) {
666-
return 0;
667-
}
668-
669-
if (!chooseConfig(&renderer, EGL_OPENGL_ES2_BIT)) {
670-
return 0;
671-
}
672-
673-
if (!createSurface(&renderer, nativeWinSurface)) {
674-
return 0;
675-
}
676-
677-
if (!initContext(&renderer,2)) {
678-
return 0;
679-
}
680-
681648
if(!compileShaders(vertexShader, fragmentShader, &vertexShaderObjectId, &fragmentShaderObjectId, &programObjectId)) {
682649
renderer.destroy();
683650
return 0;
@@ -705,6 +672,8 @@ static void sample(TestPlatform* p, void* eglDisplay, void* nativeWinSurface, in
705672
renderer.init = initRenderOpenGLES1;
706673
renderer.renderFrame = renderFrameOpenGLES1;
707674
renderer.destroy = destroyRenderOpenGLES1;
675+
renderer.renderableType = EGL_OPENGL_ES_BIT;
676+
renderer.clientVersion = 1;
708677
LOG(I, "Running with OpenGL ES 1.X")
709678
break;
710679
}
@@ -713,6 +682,8 @@ static void sample(TestPlatform* p, void* eglDisplay, void* nativeWinSurface, in
713682
renderer.init = initRenderOpenGLES2;
714683
renderer.renderFrame = renderFrameOpenGLES2;
715684
renderer.destroy = destroyRenderOpenGLES2;
685+
renderer.renderableType = EGL_OPENGL_ES2_BIT;
686+
renderer.clientVersion = 2;
716687
LOG(I, "Running with OpenGL ES 2.X")
717688
break;
718689
}
@@ -721,40 +692,97 @@ static void sample(TestPlatform* p, void* eglDisplay, void* nativeWinSurface, in
721692
break;
722693
}
723694

695+
if (!getAndInitDisplay(&renderer, p, eglDisplay)) {
696+
return;
697+
}
724698

725-
if (renderer.init(p, eglDisplay, nativeWinSurface)) {
726-
int i = 0;
727-
TimeRecord_t s;
728-
TimeRecord_t e;
729-
if (!eglSwapInterval(display, 1)) {
730-
logEGLError("eglSwapInterval()", eglGetError());
731-
}
732-
else {
733-
while (i < maxFrameCount)
734-
{
735-
LOG(I, "FRAME ...")
736-
renderer.renderFrame();
737-
START_RECORD_DURATION(&s);
738-
if (!eglSwapBuffers(display, surface)) {
739-
logEGLError("eglSwapBuffers()", eglGetError());
740-
}
741-
LOG(I, "FRAME DONE")
742-
END_RECORD_DURATION(&e);
743-
LOG_DURATION(&s, &e)
744-
i++;
699+
if (!chooseConfig(&renderer, renderer.renderableType)) {
700+
return;
701+
}
702+
703+
init:
704+
if (!createSurface(&renderer, nativeWinSurface)) {
705+
return;
706+
}
707+
708+
if (!createContext(&renderer,renderer.clientVersion)) {
709+
return;
710+
}
711+
712+
if (!setAsCurrent(&renderer)) {
713+
return;
714+
}
715+
716+
if (!eglSwapInterval(display, 1)) {
717+
logEGLError("eglSwapInterval()", eglGetError());
718+
return;
719+
}
720+
721+
EGLint error;
722+
if (!renderer.init(p, eglDisplay, nativeWinSurface)) {
723+
return;
724+
}
725+
726+
int i = 0;
727+
TimeRecord_t s;
728+
TimeRecord_t e;
729+
while (i < maxFrameCount)
730+
{
731+
LOG(I, "FRAME ...")
732+
renderer.renderFrame();
733+
START_RECORD_DURATION(&s);
734+
if (!eglSwapBuffers(display, surface)) {
735+
error = eglGetError();
736+
logEGLError("eglSwapBuffers()", error);
737+
if (error != EGL_CONTEXT_LOST) {
738+
break;
745739
}
740+
if (!destroySurface()) {
741+
return;
742+
}
743+
744+
if (!destroyContext()) {
745+
return;
746+
}
747+
748+
if (!setAsCurrent(&renderer)) {
749+
return;
750+
}
751+
752+
goto init;
746753
}
754+
LOG(I, "FRAME DONE")
755+
END_RECORD_DURATION(&e);
756+
LOG_DURATION(&s, &e)
757+
i++;
747758
}
759+
748760
renderer.destroy();
761+
762+
if (!destroySurface()) {
763+
return;
764+
}
765+
766+
if (!destroyContext()) {
767+
return;
768+
}
769+
770+
if (!setAsCurrent(&renderer)) {
771+
return;
772+
}
773+
774+
if (!destroyDisplay()) {
775+
return;
776+
}
749777
}
750778

751779
void run_sample1(TestPlatform* p) {
752780
LOG(I, "Executing: " __FILE__)
753781
setup(p);
754-
sample(p, p->validNativeDisplay, p->validNativeWindow, 1000, 1);
782+
sample(p, p->validNativeDisplay, p->validNativeWindow, 100, 1);
755783
teardown(p);
756784
setup(p);
757-
sample(p, p->validNativeDisplay, p->validNativeWindow, 1000, 2);
785+
sample(p, p->validNativeDisplay, p->validNativeWindow, 100, 2);
758786
teardown(p);
759787
}
760788

0 commit comments

Comments
 (0)