OpenGL ES与EGL的关系(二十一),完美讲解内存缓存LruCache实现原理

glEnable(GL_TEXTURE_2D);

glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

const GLint xc = (mWidth - mAndroid[0].w) / 2;

const GLint yc = (mHeight - mAndroid[0].h) / 2;

const Rect updateRect(xc, yc, xc + mAndroid[0].w, yc + mAndroid[0].h);

glScissor(updateRect.left, mHeight - updateRect.bottom, updateRect.width(),

updateRect.height());

// Blend state

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

const nsecs_t startTime = systemTime();

do {

nsecs_t now = systemTime();

double time = now - startTime;

float t = 4.0f * float(time / us2ns(16667)) / mAndroid[1].w;

GLint offset = (1 - (t - floorf(t))) * mAndroid[1].w;

GLint x = xc - offset;

glDisable(GL_SCISSOR_TEST);

glClear(GL_COLOR_BUFFER_BIT);

glEnable(GL_SCISSOR_TEST);

glDisable(GL_BLEND);

glBindTexture(GL_TEXTURE_2D, mAndroid[1].name);

glDrawTexiOES(x, yc, 0, mAndroid[1].w, mAndroid[1].h);

glDrawTexiOES(x + mAndroid[1].w, yc, 0, mAndroid[1].w, mAndroid[1].h);

glEnable(GL_BLEND);

glBindTexture(GL_TEXTURE_2D, mAndroid[0].name);

glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h);

EGLBoolean res = eglSwapBuffers(mDisplay, mSurface);

if (res == EGL_FALSE)

break;

// 12fps: don’t animate too fast to preserve CPU

const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now);

if (sleepTime > 0)

usleep(sleepTime);

checkExit();

} while (!exitPending());

glDeleteTextures(1, &mAndroid[0].name);

glDeleteTextures(1, &mAndroid[1].name);

return false;

}

EGL加载OpenGL ES库


从上面的例子中,我们发现通过egl_函数调用后,直接就能调用gl_函数去画图了,为何?难道在egl*函数调用过程中,已经将opengl相关实现的库加载了吗?

涉及的库


首先,由于涉及的库较多,先列出来(高通平台,原生的只有前4个),

//算是android中的egl库,用来加载具体的实现

system\lib\libEGL.so

//opengl具体实现的wrapper

system\lib\libGLESv1_CM.so

system\lib\libGLESv2.so

//opengl软件实现,即agl

system\lib\egl\libGLES_android.so

//egl的实现

system\vendor\lib\egl\libEGL_adreno.so

//opengl硬件实现

system\v

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值