当前位置: 首页 > 知识库问答 >
问题:

android glsurfaceview弹性贴合

都飞跃
2023-03-14

我使用glsurfaceview和它的渲染器显示GLES到设备全屏。这和预期的一样。

现在我想添加“缩放”输出大小的选项。我的意思是(例如)在屏幕的四分之一处渲染视口,然后在显示时拉伸到全屏。这将允许速度较慢的着色器渲染得更快,但会有一点块状。

我目前可以缩小GLES大小改变glViewPort,它呈现在屏幕的左下角。我怎样才能让这个下半部分伸展到整个屏幕上?

非常感谢您提供的任何提示/答案。

解决方案经过更多的尝试和错误和谷歌搜索。这是将四分之一大小的图像渲染为全屏。

就在glsurfaceview创建之后;

glSurfaceView.getHolder().setFixedSize(glWidth,glHeight);

glHeight和glWidth是内部GLES渲染大小。因此,要渲染屏幕1/4的图像,请使用glWidth=屏幕宽度/2和glHeight=屏幕高度/2

然后在onSurfaceChanged中设置glViewPort;

glViewport(0, 0, screenWidth/2, screenHeight/2);

答对了。更快的渲染(但2x2块像素)输出。

希望这能帮助其他人解决这个问题。

共有1个答案

宓文斌
2023-03-14

你的问题已经有了答案,但我会用一些链接来详细说明。

Surface的大小与View的大小无关。如果它们不同,显示硬件会在表面到达显示器时缩放表面。这意味着您可以使用setFixedsize()调用为Surface设置任意大小,该调用可用于减少Canvas或GLES必须更新的像素数量。

如果您使用Canvas在软件中绘图,它还可以让您避免重新缩放位图,因为您可以依赖每个设备上的Surface大小相同。

有一篇关于该功能的官方博客文章,以及在Grafika中使用该功能的一个示例(此处为视频)。

 类似资料:
  • 之前我们介绍过,响应式网站设计主要包括三部分:弹性布局、媒体查询和弹性媒介。我们分别了解下这几个。 弹性布局 所谓的弹性布局,说的是在创建网站的时候,采用流体网格布局方式,动态地调整网站布局宽度以此来适应各种设备屏幕大小。 弹性布局不使用固定的测量单位,比如像素或者英寸。原因显而易见,视窗( viewport )的高度和宽度在不同设备之间是不断变化的,那么弹性网站布局为了适应这种变化,所以就不可能

  • Bootstrap 终于支持了弹性盒。只需用少量变量或者交换一下样式表就可以使用这个崭新的CSS布局样式。 它包含了什么? 在一系列Bootstrap的组件中,弹性盒支持都是可用的。 整个网格系统(混合和预定义的类),float变换成display: flex;。 输入框组,由display: table;变成display: flex; 。 媒体组件display: table;和一系列hack

  • ScalingEntry SPI 名称 详细说明 ScalingEntry 弹性伸缩入口 已知实现类 详细说明 MySQLScalingEntry 基于 MySQL 的弹性伸缩入口 PostgreSQLScalingEntry 基于 PostgreSQL 的弹性伸缩入口

  • 背景 Apache ShardingSphere 提供了数据分片的能力,可以将数据分散到不同的数据库节点上,提升整体处理能力。 但对于使用单数据库运行的系统来说,如何安全简单地将数据迁移至水平分片的数据库上,一直以来都是一个迫切的需求; 同时,对于已经使用了 Apache ShardingSphere 的用户来说,随着业务规模的快速变化,也可能需要对现有的分片集群进行弹性扩容或缩容。 简介 Sha

  • 目的 测试 OpenSHift 水平弹性扩展,资源限制。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 创建工程1. CLI 登录到 OCP $ oc login https://master.example.com:8443 -u admin -p admin2. 创建工程 $ oc new-project test-hpa 准备测试镜像 本部分使用测试

  • 问题内容: 每次执行此查询需要200毫秒以上的时间: 但这每次在第一次查询后每次执行只需要2-3毫秒: 注意在两个查询中相同的ID值。看起来第二个查询使用第一个查询的缓存结果。但是,为什么第一个查询不能使用缓存的结果本身?从第一个查询中删除不会更改任何内容。 当我使用其他ID执行第二个查询时,第一次执行该查询大约需要40毫秒,此后每次需要2-3毫秒。因此,第二个查询不仅运行速度更快,而且还缓存结果