Articles of 纹理

提高Android上OpenGL ES填充率的技巧

在我的dynamic壁纸,我正在绘制覆盖整个屏幕的3纹理四边形。 在Nexus One上,我得到了40fps。 我正在寻找提高性能的方法。 四边形被混合在一起,纹理从RGB_8888位图加载。 1024×1024是纹理。 我有 glDisable(GL_DITHER); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); glDisable(GL10.GL_LIGHTING); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 我试过的东西都是40fps: 将纹理尺寸减小到512×512和256×256 使用draw_texture扩展 禁用混合 将纹理过滤从GL_LINEAR更改为GL_NEAREST 使用VBOs(绝望的尝试,因为只有三个四边形…) 在独立活动中运行绘图代码(如果某个活动壁纸会影响性能) 如果我画2层而不是3层,fps上升到45左右,然后画1层看到fps上升到55.我想我受限于填充率,因为closures和潜在的昂贵的function导致相同的FPS,而似乎改善FPS的唯一的东西只是画less… 我正在考虑纹理压缩的想法,但支持不同的压缩格式似乎并不好玩。 ETC1没有我需要的alpha通道,我不确定是否PVRTC和ATITC甚至可以从Java和OpenGL ES 1.0或1.1中使用。 我很乐意听到有关其他方面的想法。 如果有用的话,我可以指出当前版本的壁纸和截图。

(Java LibGDX)如何在LibGDX中调整纹理大小?

我已经和LibGDX玩了一段时间了,并且想要将我的程序轻松移植到不同的系统上。 我有一个背景纹理,我想缩放到当前使用的分辨率。 图像是1920×1080,如何在运行时将其更改为当前使用的分辨率?

显示黑色纹理的Android OpenGL2.0

我正在尝试在OpenGL2.0中将纹理绘制到四边形上。 到目前为止,我已经得到了四边形和一切,但纹理不存在 – 四边形都是黑色的。 我的主要怀疑是我没有正确地映射纹理 – 我的纹理不是2的幂,也不是正方形 – 它们的宽度在mWidth字段中,mRowHeight中的高度。 四边形绘制在一个垂直列表中,用一个翻译matrix完成。 我会非常感激,如果任何人都可以过去这个事业,我绝望! 这里是相关的代码: 初始化缓冲区: void initBuffers() { float r = (float) mRowHeight / (mHeight / 2f); ByteBuffer bb; float[] bounds = { // XYZ /* 0 – TL */-1f, 1f, 0f, /* 1 – BL */-1f, 1 – r, 0f, /* 2 – BR */ 1f, […]

Opengl透明背景和相机预览不喜欢纹理

我一直在创build一个opengl相机覆盖,并成功地放置了一个透明背景的3D立方体在相机预览上,但是添加纹理时会出现问题。 它的自我出现的纹理几秒钟,然后整个opengl立方体消失,只剩下相机预览运行。 这是我添加相机和opengl视图的地方 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); glView = new GLLayer(this); mPreview = new CamLayer(this); camera = new CameraSurfaceView(this); setContentView(glView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); addContentView(camera, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); // does not work when texture added } 这是class级给我所有的麻烦,我使用bindCameraTexture方法来dynamic地重新构build一个位图的立方体,这与透明的回合工作。 public GLLayer(Context c) { super(c); this.setEGLConfigChooser(8, 8, 8, 8, 16, 0); this.setRenderer(this); this.getHolder().setFormat(PixelFormat.TRANSLUCENT);//sets the backround to transparent […]

Opengl ES 1.1 / Android – 2011年的纹理映射到一个平方的崩溃

我正在尝试将纹理映射到纹理延伸至正方形的正方形上。 目前纹理贴图,但它没有映射到正确的位置和OGL执行一些歪斜或这样的,我不知道。 图像是64×64,我试过的广场是从-2到2(hor和ver)和-1到1.这里是图像: 纹理代码是: float texture[] = { 0,0,0,1, 1,0,1,1 }; ByteBuffer byteBuf = ByteBuffer.allocateDirect(texture.length * 4); byteBuf.order(ByteOrder.nativeOrder()); FloatBuffer textureBuffer = byteBuf.asFloatBuffer(); textureBuffer.put(texture); textureBuffer.flip(); int[] buffer = new int[1]; gl11.glGenBuffers(1, buffer, 0); textureCoordPointer = buffer[0]; gl11.glBindBuffer(GL11.GL_TEXTURE_COORD_ARRAY, textureCoordPointer); gl11.glBufferData(GL11.GL_TEXTURE_COORD_ARRAY, textureBuffer.capacity() * 4, textureBuffer, GL11.GL_STATIC_DRAW); gl11.glBindBuffer(GL11.GL_TEXTURE_COORD_ARRAY, 0); Bitmap bitmap = BitmapFactory.decodeResource(context .getResources(),R.drawable.afd); int textures[] = new int[1]; […]

在Android中获得最大的OpenGL ES 2.0纹理大小限制

我正在尝试在Android中为OpenGL 2.0获得最大纹理大小限制。 但是我发现下一条指令只有当前处于OpenGL上下文中才有效,换句话说,我必须有一个GL表面和一个GL渲染器等,我不想要。 int[] maxTextureSize = new int[1]; GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0); 所以我来到了下一个algorithm,它给了我最大的纹理尺寸,而不必创build任何表面或渲染器。 它工作正常,所以我的问题是,如果这将适用于所有的Android设备,如果有人可以发现任何错误,以防万一。 public int getMaximumTextureSize() { EGL10 egl = (EGL10)EGLContext.getEGL(); EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); // Initialise int[] version = new int[2]; egl.eglInitialize(display, version); // Query total number of configurations int[] totalConfigurations = new int[1]; egl.eglGetConfigs(display, null, 0, totalConfigurations); // Query actual list configurations EGLConfig[] […]

线程纹理加载android opengl游戏的过程

我有大量的JPG格式的纹理。 我需要在实际绘图开始之前将它们预加载到opengl内存中。 我问过一个问题,我已经被告知要做到这一点的方法是将JPEG解包和glTexImage2D(…)调用分开到另一个线程。 问题是我不太清楚如何做到这一点。 执行glTexImage2D所需的OpenGL(处理程序?)仅在GLSurfaceView.Renderer的onSurfaceCreated和OnDrawFrame方法中可用。 我不能解压所有我的纹理,然后在onSurfaceCreated(…)加载它们在opnegl,因为他们可能不适合有限的VM内存(20-40MB?) 这意味着我必须解压并逐个加载它们,但是在这种情况下,我不能得到一个opengl指针。 请问有人可以给我和opengl游戏的纹理加载线程的例子吗? 这一定是一些典型的程序,我不能在任何地方得到任何信息。

在Android上符合OpenGL-ES 2.0的最小所需纹理大小?

是否有某种硬件需要支持的最小纹理尺寸才能符合OpenGL-ES 2.0规范? 像GL_MAX_TEXTURE_SIZE值必须至less是1024或2048或类似的东西? 我想知道这个的原因是因为我在使用着色器的东西,因此必须是OpenGL-ES 2.0。 因此,我想使纹理尽可能大,而不必考虑每个硬件纹理的限制(如只有512×512的旧手机)。 如果有一个最低数量(或大多数设备支持的某个值),这将帮助我很多。

Android OpenGL结合了SurfaceTexture(外部图像)和普通纹理

我想混合相机预览SurfaceTexture与一些覆盖纹理。 我正在使用这些着色器进行处理: private final String vss = "attribute vec2 vPosition;\n" + "attribute vec2 vTexCoord;\n" + "varying vec2 texCoord;\n" + "void main() {\n" + " texCoord = vTexCoord;\n" + " gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 );\n" + "}"; private final String fss = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" + "uniform […]

位图太大而无法上传到纹理中

我在绘图目录中有一个960×1440大小的图像文件。 当应用程序启动时,图像不会作为背景加载,在logcat中我看到: 位图太大而无法上传到纹理(2880×4320,最大= 4096×4096) 为什么说2880×4320如果图像是960×1440? 位图通过xml加载: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/launcher_bg" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin">