据非常few related topics that I could find我收集到的是,获得正确光照计算的求幂步骤可能必须在 iOS 应用程序的最终片段着色器中完成。
我一直在使用最新最好的 Xcode 5 OpenGL 调试器进行性能分析,片段的求幂计算量很大。这是整个着色器中花费时间最长的线(其余性能被点光源所需的各种 norm 调用所耗尽)。
glEnable(GL_FRAMEBUFFER_SRGB); 不起作用,因为未声明 GL_FRAMEBUFFER_SRGB。
当然,我应该为 GL ES 使用的实际枚举可能会有所不同。
根据 Apple :
The following extensions are supported for the SGX 543 and 554 processors only:
EXT_color_buffer_half_float
EXT_occlusion_query_boolean
EXT_pvrtc_sRGB
EXT_shadow_samplers
EXT_sRGB
EXT_texture_rg
OES_texture_half_float_linear
好吧,没有 543 或 554 的最新设备是 iPhone 4。
来自 the extension's text file看起来我可以将 SRGB8_ALPHA8_EXT 设置为 RenderbufferStorage 的 internalformat 参数,但没有说明如何获得正常的最终帧缓冲区以应用 sRGB免费为我们服务。
现在 sRGB 校正似乎是获得正确颜色所缺少的步骤。我在我的应用程序中为处理可怕的“曝光不足”颜色所做的工作是在片段着色器中手动应用 Gamma 校正,如下所示:
mediump float gammaf = 1.0/1.8; // this line declared outside of `main()`
// it specifies a constant 1.8 gamma
mediump vec4 gamma = vec4(gammaf, gammaf, gammaf, 1.0);
gl_FragColor = pow(color, gamma); // last line of `main()`
现在我认识到典型的渲染管线涉及一个或多个纹理渲染,然后是 FS 四边形绘制,这将使我有机会使用 SRGB8_ALPHA_EXT 渲染缓冲区,但我我应该没有一个吗?我是 SOL 吗?
如果是这样的话,pow 调用会占用太多时间,我似乎可以通过构建 1D 纹理进行采样并用作 Gamma 查找表。然后可以使用此纹理以自定义方式调整输出颜色强度(与仅原始取幂相比,获得更好的 sRGB 近似值)。但这似乎有点不对劲,因为据说 sRGB 是免费的。
还有一点令人担忧的是,在 GL ES 2.0 规范中没有任何地方提到字符串 srgb。 According to the makers of glm GL ES 完全忽略 sRGB。
我知道我已经使用我的代码来渲染纹理(我制作了一个基本的 OpenGL 驱动的图像查看器来渲染 PVRTC 纹理)并且它们没有“变暗”。我认为那里正在发生的事情是由于 GL ES 2 缺乏 sRGB 意识,纹理被加载为线性空间并以相同的方式写回。在这种情况下,由于没有应用任何光照(所有颜色都乘以 1.0),结果没有任何问题。
最佳答案
iOS 7.0 添加了新的颜色格式 kEAGLColorFormatSRGBA8,您可以为 kEAGLDrawablePropertyColorFormat 键设置它来代替 kEAGLColorFormatRGBA8(默认值) CAEAGLLayer 的 drawableProperties 字典。如果您使用 GLKit 为您管理主帧缓冲区,您可以通过将 drawableColorFormat 属性设置为 GLKViewDrawableColorFormatSRGBA8888,让 GLKView 创建一个 sRGB 渲染缓冲区>.
请注意,EXT_sRGB 的 OpenGL ES 版本的行为就像始终启用 GL_FRAMEBUFFER_SRGB 一样。如果您想在不与目标帧缓冲区进行 sRGB 转换的情况下进行渲染,则需要使用具有非 sRGB 内部格式的不同附件。
关于ios - iOS OpenGL ES 2.0 上的 sRGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769620/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到