gpt4 book ai didi

iphone - 尽管平铺,512x512 纹理仍会在 iPhone 上造成巨大的 GPU 压力

转载 作者:行者123 更新时间:2023-12-03 21:14:06 29 4
gpt4 key购买 nike

我正在 iPhone 上测试我的简单 OpenGL ES 实现(2D 游戏),并且在使用分析器时我注意到渲染利用率很高。这些是事实:

  • 我以 60 fps 的速度仅显示一个预加载的大型纹理(512x512 像素),渲染利用率约为 40%。
  • 我的纹理是使用GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA(我使用的唯一 GL 函数)进行混合的。
  • 我尝试过将纹理变小并平铺,但这没有什么区别
  • 我使用的是 1024x1024 像素的 PNG 纹理图集

我觉得很奇怪,这个一个纹理导致了如此强烈的 GPU 使用。

这是预期的吗?我做错了什么?

编辑:我的代码:

// OpenGL setup is identical to OpenGL ES template
// initState is called to setup
// timer is initialized, drawView is called by the timer

- (void) initState
{
//usual init declarations have been omitted here
glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (2,GL_FLOAT,sizeof(Vertex),&allVertices[0].x);
glEnableClientState (GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer (2,GL_FLOAT,sizeof(Vertex),&allVertices[0].tx);
glEnableClientState (GL_COLOR_ARRAY);
glColorPointer (4,GL_UNSIGNED_BYTE,sizeof(Vertex),&allVertices[0].r);
}
- (void) drawView
{
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

GLfloat width = backingWidth /2.f;
GLfloat height = backingHeight/2.f;

glOrthof(-width, width, -height, height, -1.f, 1.f);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.f, 0.f, 0.f, 1.f);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
[self checkGLError];
}

编辑:我做了一些改进,但没有一个能够降低渲染利用率。我将纹理划分为 32x32 的部分,将坐标和纹理坐标的类型从 GLfloat 更改为 GLshort,并为退化三角形添加了额外的顶点。

更新内容为:

初始化状态: (顶点和纹理指针现在为 GL_SHORT)

glMatrixMode(GL_TEXTURE);
glScalef(1.f / 1024.f, 1.f / 1024.f, 1.f / 1024.f);
glMatrixMode(GL_MODELVIEW);
glScalef(1.f / 16.f, 1.f/ 16.f, 1.f/ 16.f);

绘制 View :

glDrawArrays(GL_TRIANGLE_STRIP, 0, 1536); //(16*16 parts * 6 vertices)  

最佳答案

我正在编写一个应用程序,它使用 GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA 在 2D 环境中相互叠加显示 5 个 512x512 纹理,并且我可以获得大约 14fps。你真的需要 60fps 吗?对于一场比赛,我认为24-30就可以了。另外,如果可能的话,请使用 PVR 纹理压缩。有一个示例将其包含在 SDK 中。

关于iphone - 尽管平铺,512x512 纹理仍会在 iPhone 上造成巨大的 GPU 压力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872560/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com