xref: /aosp_15_r20/frameworks/native/libs/gui/tests/SurfaceTextureMultiContextGL.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright 2013 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #ifndef ANDROID_SURFACE_TEXTURE_MULTI_CONTEXT_GL_H
18*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_SURFACE_TEXTURE_MULTI_CONTEXT_GL_H
19*38e8c45fSAndroid Build Coastguard Worker 
20*38e8c45fSAndroid Build Coastguard Worker #include "SurfaceTextureGL.h"
21*38e8c45fSAndroid Build Coastguard Worker 
22*38e8c45fSAndroid Build Coastguard Worker namespace android {
23*38e8c45fSAndroid Build Coastguard Worker 
24*38e8c45fSAndroid Build Coastguard Worker class SurfaceTextureMultiContextGLTest : public SurfaceTextureGLTest {
25*38e8c45fSAndroid Build Coastguard Worker protected:
26*38e8c45fSAndroid Build Coastguard Worker     enum { SECOND_TEX_ID = 123 };
27*38e8c45fSAndroid Build Coastguard Worker     enum { THIRD_TEX_ID = 456 };
28*38e8c45fSAndroid Build Coastguard Worker 
SurfaceTextureMultiContextGLTest()29*38e8c45fSAndroid Build Coastguard Worker     SurfaceTextureMultiContextGLTest():
30*38e8c45fSAndroid Build Coastguard Worker             mSecondEglContext(EGL_NO_CONTEXT),
31*38e8c45fSAndroid Build Coastguard Worker             mThirdEglContext(EGL_NO_CONTEXT) {
32*38e8c45fSAndroid Build Coastguard Worker     }
33*38e8c45fSAndroid Build Coastguard Worker 
SetUp()34*38e8c45fSAndroid Build Coastguard Worker     virtual void SetUp() {
35*38e8c45fSAndroid Build Coastguard Worker         SurfaceTextureGLTest::SetUp();
36*38e8c45fSAndroid Build Coastguard Worker 
37*38e8c45fSAndroid Build Coastguard Worker         // Set up the secondary context and texture renderer.
38*38e8c45fSAndroid Build Coastguard Worker         mSecondEglContext = eglCreateContext(mEglDisplay, mGlConfig,
39*38e8c45fSAndroid Build Coastguard Worker                 EGL_NO_CONTEXT, getContextAttribs());
40*38e8c45fSAndroid Build Coastguard Worker         ASSERT_EQ(EGL_SUCCESS, eglGetError());
41*38e8c45fSAndroid Build Coastguard Worker         ASSERT_NE(EGL_NO_CONTEXT, mSecondEglContext);
42*38e8c45fSAndroid Build Coastguard Worker 
43*38e8c45fSAndroid Build Coastguard Worker         ASSERT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
44*38e8c45fSAndroid Build Coastguard Worker                 mSecondEglContext));
45*38e8c45fSAndroid Build Coastguard Worker         ASSERT_EQ(EGL_SUCCESS, eglGetError());
46*38e8c45fSAndroid Build Coastguard Worker         mSecondTextureRenderer = new TextureRenderer(SECOND_TEX_ID, mST);
47*38e8c45fSAndroid Build Coastguard Worker         ASSERT_NO_FATAL_FAILURE(mSecondTextureRenderer->SetUp());
48*38e8c45fSAndroid Build Coastguard Worker 
49*38e8c45fSAndroid Build Coastguard Worker         // Set up the tertiary context and texture renderer.
50*38e8c45fSAndroid Build Coastguard Worker         mThirdEglContext = eglCreateContext(mEglDisplay, mGlConfig,
51*38e8c45fSAndroid Build Coastguard Worker                 EGL_NO_CONTEXT, getContextAttribs());
52*38e8c45fSAndroid Build Coastguard Worker         ASSERT_EQ(EGL_SUCCESS, eglGetError());
53*38e8c45fSAndroid Build Coastguard Worker         ASSERT_NE(EGL_NO_CONTEXT, mThirdEglContext);
54*38e8c45fSAndroid Build Coastguard Worker 
55*38e8c45fSAndroid Build Coastguard Worker         ASSERT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
56*38e8c45fSAndroid Build Coastguard Worker                 mThirdEglContext));
57*38e8c45fSAndroid Build Coastguard Worker         ASSERT_EQ(EGL_SUCCESS, eglGetError());
58*38e8c45fSAndroid Build Coastguard Worker         mThirdTextureRenderer = new TextureRenderer(THIRD_TEX_ID, mST);
59*38e8c45fSAndroid Build Coastguard Worker         ASSERT_NO_FATAL_FAILURE(mThirdTextureRenderer->SetUp());
60*38e8c45fSAndroid Build Coastguard Worker 
61*38e8c45fSAndroid Build Coastguard Worker         // Switch back to the primary context to start the tests.
62*38e8c45fSAndroid Build Coastguard Worker         ASSERT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
63*38e8c45fSAndroid Build Coastguard Worker                 mEglContext));
64*38e8c45fSAndroid Build Coastguard Worker     }
65*38e8c45fSAndroid Build Coastguard Worker 
TearDown()66*38e8c45fSAndroid Build Coastguard Worker     virtual void TearDown() {
67*38e8c45fSAndroid Build Coastguard Worker         if (mThirdEglContext != EGL_NO_CONTEXT) {
68*38e8c45fSAndroid Build Coastguard Worker             eglDestroyContext(mEglDisplay, mThirdEglContext);
69*38e8c45fSAndroid Build Coastguard Worker         }
70*38e8c45fSAndroid Build Coastguard Worker         if (mSecondEglContext != EGL_NO_CONTEXT) {
71*38e8c45fSAndroid Build Coastguard Worker             eglDestroyContext(mEglDisplay, mSecondEglContext);
72*38e8c45fSAndroid Build Coastguard Worker         }
73*38e8c45fSAndroid Build Coastguard Worker         SurfaceTextureGLTest::TearDown();
74*38e8c45fSAndroid Build Coastguard Worker     }
75*38e8c45fSAndroid Build Coastguard Worker 
76*38e8c45fSAndroid Build Coastguard Worker     EGLContext mSecondEglContext;
77*38e8c45fSAndroid Build Coastguard Worker     sp<TextureRenderer> mSecondTextureRenderer;
78*38e8c45fSAndroid Build Coastguard Worker 
79*38e8c45fSAndroid Build Coastguard Worker     EGLContext mThirdEglContext;
80*38e8c45fSAndroid Build Coastguard Worker     sp<TextureRenderer> mThirdTextureRenderer;
81*38e8c45fSAndroid Build Coastguard Worker };
82*38e8c45fSAndroid Build Coastguard Worker 
83*38e8c45fSAndroid Build Coastguard Worker }
84*38e8c45fSAndroid Build Coastguard Worker 
85*38e8c45fSAndroid Build Coastguard Worker #endif
86