草庐IT

ios - 解决奇怪的行为 re : glsl/metal shader.(无意的坐标翻转)

我已经将这个着色器从shadertoy移植到适用于iOS的Metal着色器中。原来的工作正常,但现在我已经将它移至iOS,我得到了一些奇怪的行为。基本上,在着色器运行的前几秒,一切都错位了。我认为这是因为X轴上存在镜像,这是正确的,但垂直坐标也以某种方式在一侧翻转。谁能告诉我应该如何解决这个问题?原始Shadertoy:https://www.shadertoy.com/view/ltl3Dj我的版本,转换成Metal着色语言:#includeusingnamespacemetal;///////////////////CSBCONSTANTS(notrequired,justmake

ios - 哪些 GLSL ES 扩展在各种 iOS 设备上可用?

我正在寻找任何iOS设备上可用的所有扩展的列表(以及哪些设备上可用)。尽管进行了大量搜索,但我仍未在苹果文档中找到正确的页面,但我确定它在某处。有什么指点吗? 最佳答案 此代码应打印出所有扩展名:NSString*extensionString=[NSStringstringWithUTF8String:(char*)glGetString(GL_EXTENSIONS)];NSArray*extensions=[extensionStringcomponentsSeparatedByCharactersInSet:[NSCharac

ios - GLSL:是否可以创建包含中心像素的单色区域的蒙版?

我想在我的iPhone应用程序(从相机捕获图像)中使用GLSL着色器在Photoshop中为屏幕的中央像素创建类似“魔术棒”的效果。现在我通过获取像素数组并对中心像素应用某种泛洪填充算法(全部使用Objective-C代码)来实现这一点。这是在CPU上执行的,这对我来说有点太慢了,所以我想尝试使用GLSL着色器来实现。实际上,我需要的只是在片段着色器中重写flood-fill,更准确地说,了解当前片段的颜色是否接近阈值颜色,以及当前片段是否与先前检测到的片段相邻。这对我来说听起来太困惑了,我什至无法理解这是否可能。flood-fill的算法是(伪代码):Flood-fill(node,

android - glsl es dFdx/dFdy 模拟

我正在编写跨平台应用程序。它应该在Android设备上运行。我想使用dFdx/dFdy进行抗锯齿。但是,不幸的是,glsles2.0不支持导数。我可以用什么东西代替dFdx/dFdy吗?IE。1/sprite_width,1/sprite_height以屏幕像素为单位。正如我所说,我需要它才能在Android设备上运行。我看到我的设备支持GL_OES_standard_derivatives,它允许它使用这个函数。所有androidopengles2.0设备都支持吗? 最佳答案 正如我所说,许多OpenglES2.0设备都支持GL_

android - 在相机流 (GLSL) 上绘制文本或图像

我有一个基于grafika'sexamples的直播应用程序,我通过RTMP发送我的视频源进行直播。我现在想通过在我的视频流上叠加文本或Logo来为我的视频添加水印。我知道这可以通过GLSL过滤来完成,但我不知道如何根据我链接的示例实现它。我尝试使用Alpha混合,但似乎这两种纹理格式在某种程度上不兼容(一种是TEXTURE_EXTERNAL_OES,另一种是TEXTURE_2D),我只得到一个黑框作为返回。编辑:我的代码基于KickflipAPI:classCameraSurfaceRendererimplementsGLSurfaceView.Renderer{privatesta

android - Adreno 220 GLSL 漏洞

我们在使用Adreno220GPU的SonyXperiaS手机上进行GLSLalpha测试时遇到问题。设备运行Android4.0.4。在Adreno200、Adreno205、Adreno225以及Tegra2、Mali400和PowerVRGPU上工作正常。着色器代码://vertexuniformhighpmat4uMVPMatrix;attributehighpvec4aPosition;attributehighpvec2aTextureCoord;varyingmediumpvec2vTextureCoord;voidmain(){gl_Position=uMVPMatri

安卓 OpenGL ES 2.0 : Is "switch-case" syntax possible in GLSL fragment shader on Samsung Galaxy S2?

有人知道如何在SamsungGalaxyS2的fragment着色器中执行switchcase语法吗?我收到编译错误:Expectedliteralor'(',got'switch'。我的语法如下:switch(i){case0:x=alphas[0];break;case1://...etc.}这在Nexus7上运行良好,但在GalaxyS2上出现上述错误。switchcase指令在GalaxyS2上根本不可能吗?我想使用它们的原因是它们似乎比Nexus7上的ifelse有性能改进。如果它们在GalaxyS2上不可能,是否有查询设备的方法并使用switchcase(如果可用)和ife

android - 如何在 GLSL 中写入/防止写入 OpenGL 深度缓冲区

只有当当前像素的alpha>0.5时,我才想写入OpenGL深度缓冲区怎么做?如果像素的alphadiscard不是我要找的,因为它同时丢弃了颜色和深度信息;我只想丢弃深度信息。可以设置gl_FragDepth变量,但要设置哪个值呢?对于alphagl_FragDepth不变?我必须为此使用FBO,还是不使用它也能正常工作?我正在处理的项目是一个GLES2.0Android项目 最佳答案 我已经通过使用为我解决了这个问题glDepthMask(false)此命令禁用写入深度缓冲区但仍执行深度测试。我只是在所有其他对象之后渲染我的透明

c++ - 使用 pow() 时的 GLSL 问题

我目前正在实现一个着色器来做一些定向光。我正在学习Lighthouse3d(http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/directional-lights-per-pixel/)上的教程我遇到的问题是以下几行:vec3h=normalize(l_dir+e);floatintSpec=max(dot(h,n),0.0);floatspecularPower=pow(intSpec,shininess);如果我将“floatspecularPower”行留在-那么着色器不再“工作”....我在引号中说“工作”,因为我

c++ - GLSL bool 值的大小是多少

我想使用一个bool类型的着色器变量,但我找不到它的大小。这很重要,因为在设置顶点属性指针时,我指定了可以是的数据类型GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT,GL_FLOAT,orGL_DOUBLE在C++中,通常bool应该与4字节int具有相同的大小,但我可以假设GLSL也是如此还是它只有1个字节? 最佳答案 ThismattersbecausewhensettingupvertexattributepointerIsp