android – 在OpenGL ES中渲染一个好的有效的练习期间编译着色器?

android – 在OpenGL ES中渲染一个好的有效的练习期间编译着色器?,第1张

概述系统: Android 4.03,OpenGL ES 2.0 问题:当第一帧已经用另一个程序/着色器渲染后调用glAttachShader时,某些设备(Galaxy S3)崩溃并出现“GL_INVALID_VALUE”错误(错误堆栈中没有更多详细信息).其他设备(华硕eee TF101)完全没问题.错误并不总是发生,有时它也是“GL_INVALID_ENUM”. 如果我强制所有着色器在第一次调用o 系统: Android 4.03,OpenGL ES 2.0

@H_502_8@

问题:当第一帧已经用另一个程序/着色器渲染后调用glAttachShader时,某些设备(galaxy S3)崩溃并出现“GL_INVALID_VALUE”错误(错误堆栈中没有更多详细信息).其他设备(华硕eee TF101)完全没问题.错误并不总是发生,有时它也是“GL_INVALID_ENUM”.
如果我强制所有着色器在第一次调用onDrawFrame时编译,它适用于所有(我的)设备.@H_502_8@

问题:
是否存在openGL(ES)机器无法编译着色器的状态?
绑定缓冲区,纹理或启用的属性数组是否可能干扰将着色器附加到程序?
如果是这样,在连接着色器和链接程序之前必须确保的理想状态是什么?
在用其他着色器渲染其他对象之后编译着色器是否有效?@H_502_8@

背景:我正在开发一个AndroID库,它允许我以更加面向对象的方式使用openGL图形(使用“场景”,“材料”,“模型”等对象),可以轻松地编写游戏.场景,模型等是在与GL上下文不同的线程中创建的.只有当onDrawFrame遇到其中一个对象时,它才会在右侧线程中执行缓冲区对象绑定,纹理绑定和着色器编译.
我想避免在我的代码开头编译所有着色器.根据材质,模型和场景的要求组装着色器源(例如:材质:包括凹凸贴图,模型:包括矩阵 – 调色板 – 遮蔽,场景:包括雾).当从场景中移除模型时,我将再次删除着色器 – 如果我添加另一个模型,则应该临时编译新着色器.@H_502_8@

在这一点上,我试图尽可能简洁而不发布代码 – 你可以想象从这个库中提取相关部分是很困难的.@H_502_8@解决方法 尽管不鼓励因为驱动程序需要为此获取资源(cpu),但在渲染期间编译是完全有效的.一些驱动程序声明我的触发器在驱动程序端重新编译着色器,因为某些状态被注入到着色器中.明智的做法是将绘图调用重新组织为共享相同驱动程序状态的块(由着色器程序首选,这是驱动程序执行的最昂贵的 *** 作之一).

@H_502_8@

提示:确保“使用”声明到着色器中的所有变量,制服和属性,否则,Mali驱动程序会在编译期间删除它们,当您尝试获取统一位置,属性位置和子级时,驱动程序将返回GL_INVALID_VALUE.@H_502_8@

希望有所帮助.@H_502_8@ 总结

以上是内存溢出为你收集整理的android – 在OpenGL ES中渲染一个好的/有效的练习期间编译着色器?全部内容,希望文章能够帮你解决android – 在OpenGL ES中渲染一个好的/有效的练习期间编译着色器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存