首先,我的问题是:你如何管理你的iOS Run-Loop?
接下来我的理由是:我一直在研究各种原型(v.早期开发),并发现了许多令人困惑的问题.
那么有没有人围绕这些问题找到了灵丹妙药?有没有人在这个平台上有一个杀手运行循环架构?目前看起来我必须选择较少的邪恶.
我正在使用OpenGL ES 2.0,但我认为它也与非ES有关:如何知道在创建VBO时选择什么"用法"?
这个特殊的VBO将在完全更新之前使用1到4次,我不确定是否必须选择GL_STREAM_DRAW或GL_DYNAMIC_DRAW.
我一直在Kubuntu上使用Genymotion Android模拟器,但最近我遇到了阻止它工作的Open GL错误.有趣的是,我有一个较旧的Galaxy Nexus 4.2.2模拟器图像工作正常(虽然它抱怨我启动时版本不匹配),但如果我尝试创建任何较新的图像,模拟器无法启动.当我检查logcat时,我看到以下错误:
I/SurfaceFlinger( 459): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
D/libEGL ( 459): loaded /system/lib/egl/libEGL_emulation.so
D/ ( 459): HostConnection::get() New Host Connection established 0xb890b898, tid 460
D/libEGL ( 459): loaded /system/lib/egl/libGLESv1_CM_emulation.so
D/libEGL ( 459): loaded /system/lib/egl/libGLESv2_emulation.so
E/setdpi ( 463): Setting DPI to 213
E/SurfaceFlinger( 459): hwcomposer module not found
W/SurfaceFlinger( 459): getting VSYNC period from fb HAL: 16666666
W/SurfaceFlinger( 459): no suitable EGLConfig found, trying without EGL_FRAMEBUFFER_TARGET_ANDROID
W/SurfaceFlinger( 459): no suitable EGLConfig found, trying …Run Code Online (Sandbox Code Playgroud) 我绘制了一个带纹理的梯形,但结果并没有像我原先想象的那样出现.
不是出现在单个完整的四边形上,而是在对角线处出现不连续性,其中两个包括三角形相交.
此图显示了此问题:

(注意:最后一张图片不是100%忠实的表示,但它应该得到重点.)
使用GL_TRIANGLE_STRIPOpenGL ES 2.0(在iPhone上)绘制梯形.它被完全面向屏幕绘制,并且没有被倾斜(即,这不是您正在看到的3D草图!)
我已经明白我需要执行"透视校正",大概是在我的顶点和/或片段着色器中,但我不清楚如何做到这一点.
我的代码包含一些简单的模型/视图/投影矩阵数学,但它们当前都没有影响我的纹理坐标值.更新:根据用户infact的评论,前一个语句不正确.
此外,我在ES 2.0规范中找到了这个小窍门,但不明白它意味着什么:
不支持PERSPECTIVE CORRECTION HINT,因为OpenGL ES 2.0要求对所有属性进行透视插值.
如何正确绘制纹理?
编辑:添加以下代码:
// Vertex shader
attribute vec4 position;
attribute vec2 textureCoordinate;
varying vec2 texCoord;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
texCoord = textureCoordinate;
}
Run Code Online (Sandbox Code Playgroud)
// Fragment shader
uniform sampler2D texture;
varying mediump vec2 texCoord;
void main()
{
gl_FragColor = texture2D(texture, texCoord);
}
Run Code Online (Sandbox Code Playgroud)
// Update and Drawing code (uses GLKit helpers from iOS)
- …Run Code Online (Sandbox Code Playgroud) 我一直试图执行一些OpenGL ES性能优化,试图增加我能够在我的iPhone应用程序中呈现的每秒三角形数量,但我已经碰到了一堵砖墙.我已经尝试将我的OpenGL ES数据类型从固定点转换为浮点(根据Apple的推荐),交错我的顶点缓冲区对象,并最大限度地减少绘图状态的变化,但这些变化都没有对渲染速度产生影响.无论如何,我似乎无法在运行3.0操作系统的iPhone 3G上将我的应用程序推到320,000三角形以上.根据这个基准测试,我应该能够使用我正在使用的平滑阴影在这个硬件上达到687,000个三角形/秒.
在我的测试中,当我在Instruments中运行OpenGL ES性能工具对运行的设备时,我看到统计"Tiler利用率"在渲染我的基准测试时达到接近100%,但"渲染器利用率"仅达到约30 %.这可能提供了关于显示过程中瓶颈是什么的线索,但我不知道这些值是什么意思,我没有找到任何关于它们的文档.有人对iPhone OpenGL ES仪器中的这个和其他统计数据有什么好的描述吗?我知道iPhone 3G中的PowerVR MBX Lite是基于图块的延迟渲染器,但我不确定渲染器和Tiler在该架构中的区别.
如果它有任何帮助,如果您想自己下载和测试,可以使用此应用程序的(BSD许可的)源代码.在当前配置中,每次加载新的分子结构并将三角形输出到控制台时,它会启动一个小基准.
我正在构建一个利用OpenGL的Android应用程序.就目前而言,它的背景GLSurfaceView是由我的代码动态生成的,并作为纹理加载并绘制glDrawTexfOES.这是"OK",但我可以简单地更加流畅显示图像自身的表面(无OpenGL的).有什么方法可以让GLSurfaceView透明的背景?我听说过一些传言说这可以做到setEGLConfigChooser,但我还没有找到任何确认.最后,我想带一个面我画并把GLSurfaceView在它达到一个层次分明的效果.
我知道这是一个棘手的,很可能是不可行的,但任何输入都是值得赞赏的.提前致谢.
我正在写一个实现开放式VG和OpenGL的| ES中去,这两者取决于Khronos的EGL API,据说是为了便于携带,我猜.
出于乐趣和教育原因,我正在OpenGL ES上编写一个OpenVG实现 - 我没有做过很多渲染工作,我想了解更多有关开放API和实践明确标准的实践(更容易看看我是否得到了正确的结果).
据我了解,EGL提供了一个标准API,用于检索绘图上下文(或者它正确调用的内容),而不是使用多个OS提供的API之一(GLX,WGL等)

我很难相信Khronos会经历这样的努力并将标准OpenGL从循环中移开但事实是,我还没有发现OpenGL(真正的交易)如何或者是否与EGL接口或者它是否只是OpenGL ES.如果OpenGL ES可以使用EGL的绘图上下文,标准OpenGL是否也可以使用?
我对这一切都很陌生,这就是为什么我很兴奋,但我正在做的真正项目是一个Go小部件工具包,它利用OpenVG进行绘图操作,并尽可能使用硬件加速.
如果OpenVG,OpenGL和OpenGL ES依赖于EGL,我认为我的问题可以用"是"或"否"来回答.请记住,我昨晚首先进入了这个主题.
OpenGL使用或依赖于EGL吗?
关闭主题,但没有EGL标记.应该有吗?
我需要动态检查所用设备是否支持openGL ES 2.0.我怎样才能做到这一点?
只是我遇到的一个问题 - 我有一个SKScene,我在其中使用SKAction类方法播放声音fx
[SKAction playSoundFileNamed:@"sound.wav" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试去背景时,无论声音结束,显然iOS正在终止我的应用程序gpus_ReturnNotPermittedKillClient.
现在只有当我评论这一行并且没有运行动作时,iOS才能在后台运行它(当然,暂停,但没有终止).
我究竟做错了什么?
编辑:如果没有运行,iOS将不会终止应用程序 - 例如,如果它if statement没有运行(soundOn == YES)或类似的东西,当布尔是false
我目前正在使用ffmpeg在Android上使用rtsp播放器来连接和解码视频流.我想使用OpenGL es 2.0将YUV帧转换为RGB帧并显示它但我被阻止(这是我第一次使用opengl).
我会试着清楚地解释一下我的问题是什么.
从NDK android我使用这个方法初始化一个opengl上下文(从我想用来显示图像的线程):
//
EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_NONE
};
EGLint contextAttrs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
LOGI("Initializing context");
if((display = eglGetDisplay(EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY)
{
closeContext();
return;
}
if(!eglInitialize(display, 0, 0))
{
closeContext();
return;
}
if(!eglChooseConfig(display, attribs, &config, 1, &numConfigs))
{
closeContext();
return;
}
if(!eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format))
{
closeContext();
return;
}
ANativeWindow_setBuffersGeometry(window, 0, 0, format);
if(!(surface = eglCreateWindowSurface(display, config, window, 0)))
{
closeContext(); …Run Code Online (Sandbox Code Playgroud) opengl-es ×10
android ×4
ios ×2
iphone ×2
android-ndk ×1
audio ×1
background ×1
c ×1
egl ×1
genymotion ×1
instruments ×1
multitasking ×1
opengl ×1
openvg ×1
optimization ×1
runloop ×1
sprite-kit ×1
transparent ×1
ubuntu ×1
vbo ×1