问题标签 [powervr-sgx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1966 浏览

ios - PowerVR GPU 如何提供深度缓冲区?

iOS 设备使用 PowerVR 图形架构。PowerVR 架构是基于图块的延迟渲染模型。这个模型的主要好处是它不使用深度缓冲区。

但是,我可以访问我的 iOS 设备上的深度缓冲区。具体来说,我可以使用屏幕外帧缓冲区对象将深度缓冲区转换为颜色纹理并进行渲染。

如果 PowerVR 架构不使用深度缓冲区,我如何能够渲染深度缓冲区?

0 投票
1 回答
241 浏览

c++ - Determine limit for data sent to VBO?

I'm writing a 3d application for the Playbook, which has a PowerVR SGX 540. I noticed that if I stuff enough data in the VBO through opengl, I can cause the device to crash (not just the application, but the entire device, requiring a hard reboot). To cause the crash, I sent data for a model with ~300k triangles and ~150k vertices. I sent normal data for the vertices as well.

I found that the problem doesn't occur if I send less data (tried another model with half the triangles and vertices). Also, the issue doesn't occur if I use vertex arrays (though it's incredibly slow).

I'd like to know:

  • Is what I'm seeing a common result for mobile hardware? That is, is a 300k tri model with 150k vertices and normals overkill?

  • Can I check how much memory I have available for VBO usage outside of testing a bunch of different model sizes (it takes a good five minutes to recover the device from a crash)?

  • Could anything else be causing this issue? I've provided some additional information:

I'm using Qt for my GUI, and drawing the 3d scene to an FBO before it's painted to the GUI (I haven't checked if redoing all this without a UI by creating an EGL window and drawing to that recreates the problem yet -- that'll take awhile).

To verify it wasn't me using OpenGL poorly, I tried both using raw OpenGL calls for all the 3d stuff, and also doing everything with OpenSceneGraph. Both methods fail in the exact same way (VBO works with less data, vertex arrays work, increased VBO data causes a crash).

The program works fine on my desktop. Unfortunately, I don't have any other mobile devices I can test my application out on.

0 投票
1 回答
1377 浏览

android - PowerVR SGX540 Android 纹理问题

我正在尝试在我的 android 应用程序中加载一些纹理。

它适用于三星 Galaxy ace、s2 等所有设备,但任何使用 PowerVR SGX540 gpu 的设备,例如三星 Galaxy S-gti9000
都会有一些奇怪的伪影......

一些纹理加载正确......但其他纹理完全黑色......

我确保我所有的纹理都是二次方的,但它们不是正方形的,可以是矩形的,例如 64*128。

我正在使用以下纹理参数设置....

0 投票
1 回答
1067 浏览

android - 通话结束后如何恢复我的android游戏的nativeactivity(GLES层)?

我在我的 android 应用程序中使用本机活动运行 GLES2。通话结束时,我返回我的应用程序,但屏幕保持空白。我检查了任务管理器,发现应用程序仍在运行。有人可以指出我是否 1)我必须编写代码来保存和恢复我的游戏,并且我必须在 java 中覆盖哪些调用才能做到这一点 2)有一种更自动化的方式来恢复我的应用程序而无需保存/恢复

谢谢,马丹

0 投票
0 回答
166 浏览

ios - 我遇到了剪辑问题,我不明白为什么

从特定角度观看时我会注意到它,但如果我稍微移动或改变相机指向的方向,它就会恢复正常。我什至不确定从哪里开始。

我只渲染暴露在空气中的面,并且我没有在 opengl 中启用剔除。

有人对可能导致这种情况的原因有任何想法吗?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

编辑:我通过并从 OpenGL 帧中捕获了模型-视图-投影矩阵,并测试了剪切区域的中心点。根据我的计算,该点应该在视锥体中。所以我还是很困惑。该表显示了我的工作。我从这个解决方案中得到了在视锥体中的测试:如何检查对象是否位于 OpenGL 的裁剪体积之外?

用于创建透视矩阵的数据:

用于创建 lookAt 矩阵的数据:

0 投票
2 回答
1487 浏览

ios - 如何为 cpp 类创建一个 Objective-C 委托?

我一直在尝试将 openGL-es(xcode openGL 游戏模板与 powervr 3.0 sdk 中的 ogles2tools 库结合起来。我的问题是我加载效果文件的代码行:

我应该传递一个“this”指针,以便接收回调。我需要实现的委托方法是:

我想对我来说最大的问题是如何在 Objective-C 中提供一个 cpp 委托方法?我在这个问题上做了一些阅读,但似乎我正在阅读的内容是相反的。也就是cpp中的一个objective-c委托。这很令人困惑,但这是我的想法......

我创建了一个 cpp 类来实现我需要的方法。我将它添加到我的 viewController 类中,并在 m_pEffect->Load 调用中将指针传递给这个 cpp 类。这看起来正确吗?

谢谢。

PS对不起,如果我的代码格式不好。我还在学习。

编辑: 这是我发现的关于混合objective-c和cpp的示例。这似乎与我想要做的非常相似。

更新:这是一些附加信息(由 user1118321 请求)

需要委托的 CPP 类是 CPVRTPFXEffect(PVRTPFXParserAPI.h - 来自 powerVR SDK 3.0)。我会添加一个链接,但我不确定这是否允许。 这是类头的链接,但这个版本(以及网络上的其他版本)不包括 load 方法的 pDelegate 属性。我假设它们是以前版本的示例。让我知道是否可以发布这个类文件,我会这样做。

我从阅读这个帖子中找到了一个很好的例子,说明我认为我应该做什么。所以这是我到目前为止所拥有的:

我的CPP代表课...

我的 Obj-C 包装类(刚刚从上面的示例链接修改)...

执行...

基本上我能够编译代码和调试,但是当 CPVRTPFEffect 类进行此调用时:

我得到 EXC_BAD_ACCESS。我假设它没有找到我的回调方法,因为我设置了一个断点并且该行永远不会被调用。

这是我更新的代码,它使用代理参数的桥接命令调用 CPVRTPFXEffect::Load。

谢谢你的帮助!

更新 2: 该项目使用 ARC。这是我的 viewController 界面的样子:

添加@property 对EXC_BAD_ACCESS 没有帮助。在跟踪 CPP 代码时,我不确定如何“查看” pDelegate 的值。当我将鼠标悬停在变量上时,Xcode 不会显示任何内容。

我在 CPVRTPFXEffect::Load 方法中添加了以下代码行(就在它崩溃的行之前):

这是调试输出窗口中显示的内容:

这是您的课程类型 ID:P21PVRTPFXEffectDelegate。

我不确定“P21”是什么意思(如果有的话),但看起来我快要让它工作了。我不知道,也许这是最接近的。仍然崩溃并且找不到我的方法。

0 投票
1 回答
438 浏览

ios - 沿 x 和 y 轴旋转

我正在为我的 opengl-es 2.0 3D 应用程序使用 GLKit 和 PowerVR 库。3D 场景加载了几个模拟车库环境的网格。我在车库中央有一辆车。我正在尝试向应用程序添加触摸处理,用户可以在其中旋转房间(例如,查看汽车周围的所有 4 面墙)。我也想允许在 x 轴上旋转,尽管限制在一个很小的范围内。基本上,他们可以从车顶的一点点看到地板的上方。

我可以在 Y 或 X 上旋转,但不能同时旋​​转。一旦我在两个轴上旋转,汽车就会偏离轴。汽车不再与相机保持水平。我希望我能更好地解释这一点,但希望你们能理解。

这是我的触摸实现:

这是我的更新方法:

我尝试先将新的 X 旋转矩阵与当前场景旋转相乘,然后再将新的 Y 旋转矩阵相乘。我尝试了相反的方法,认为乘法的顺序是我的问题。那没有帮助。然后我尝试在乘以当前旋转之前将新的 X 和 Y 旋转矩阵加在一起,但这也不起作用。我觉得我很接近,但在这一点上我只是没有想法。

你们能帮忙吗?谢谢。-瓦莱丽

更新:为了解决这个问题,我试图简化一点。我已经更新了上面的代码,删除了 Y 旋转范围内的任何限制。基本上,我根据用户在屏幕上的滑动来计算 X 和 Y 旋转。

如果我理解正确,我想我想用 _rotationX 的计算来旋转视图矩阵(相机/眼睛)。

我想我需要使用 World 矩阵(原点 0,0,0)进行 _rotationY 计算。我会试着得到一些我在说什么的图像。

0 投票
1 回答
346 浏览

android - PowerVR Android 示例:makefile 无法正常工作

假设我满足所有要求,我很难在 Windows 8 64 上设置 PowerVR SDK for Android:

  • Android SDK(新鲜的Eclipse)
  • 安卓NDK
  • Cygwin(带制作)
  • PowerVR 安卓 SDK 3.0

我可以完美地制作和运行 Android NDK 示例。但是,构建任何 PowerVR 示例(来自 SDK)的相同过程都失败了。这是我尝试运行 makefile 时的输出:

$ ndk Compile++ thumb : OGLES2Texturing <= OGLES2Texturing.cpp arm-linux-androideabi-g++.exe: 错误: C:/cygwin///cygdrive/c/Users/stfn/workspaces/android/03_Texturing/jni/OGLES2Texturing.cpp:没有这样的文件或目录 arm-linux-androideabi-g++.exe:致命错误:没有输入文件编译终止。/cygdrive/c/android-ndk-r8d/build/core/build-binary.mk:269:目标`obj/local/armeabi/objs/OGLES2Texturing//cygdrive/c/Users/stfn/workspaces/android/的配方03_Texturing/jni/OGLES2Texturing.o' 失败:* [obj/local/armeabi/objs/OGLES2Texturing//cygdrive/c/Users/stfn/workspaces/android/03_Texturing/jni/OGLES2Texturing.o] 错误 1

我想这个错误应该与给编译器的错误路径有关。对我来说,它看起来像是标准 Windows 和 Cygwin/Unix 路径的混合:* C:/cygwin///cygdrive/c/Users/stfn/...*

如果现在经历了这么多 makefile 试图解决这个问题,但我只是不知道还能去哪里找。这是我第一次尝试弄乱 NDK。恐怕这可能是我的最后一次了。

任何帮助将不胜感激

0 投票
0 回答
90 浏览

opengl-es-2.0 - 在具有基于延迟渲染的 PVR SGX 5 系列的 iOS 设备上,硬件何时执行之前提交的绘图命令?

我们都知道内置 POWER-VR SGX 5 系列 GPU(3GS 或更高版本)的 iOS 设备。

POWER VR GPU 基于 TBDR 技术进行 opengl 渲染,这意味着硬件不会立即执行绘图命令,而是将它们缓存到某个点,然后将它们全部执行。

这可以执行早期的 HSR,因为所有绘图数据都在执行点提交给 opengl,硬件在每个正在处理的 tile 中都有全局可见性信息,这很好我们都知道。

但我很困惑,除了 Opengl 对象(tex、着色器、缓冲区对象......)修改操作之外,WHEN 或 WHAT 使硬件停止缓存并执行先前作为应用程序调用 glDrawArray 或 glDrawElement 一次又一次提交的命令和 glFlush、glFinish 函数?

PS 我也知道当 PB(帮助执行 HSR 的参数缓冲区)已满时,硬件将刷新之前提交的命令。

0 投票
1 回答
393 浏览

opengl-es - 纹理不会加载 OpenGL ES 2.0 PowerVR SDK

我目前在使用 PVR SDK 加载纹理时遇到问题。我知道我的两个纹理都有一个线性采样过滤器。但是,如果纹理加载失败,它会触发我设置的消息。这就是我加载纹理的方式。

这是我加载纹理的方法

在我的 initView 方法()中调用 LoadTextures 之后