我是OpenGL的初学者,试图运行一些测试。 GLSL Sandbox Gallexy有很多片段着色器,我想在GLES中尝试它们,重用代码。但是,对于大多数着色器而言,它似乎不起作用。
在我尝试运行的着色器中,由于某些原因,唯一一个在GLES中工作的着色器是this one。我必须消除着色器的时间依赖性,以实现这一点。
似乎WebGL和GLES中的某些变量名称不同。如果是这样的话,究竟是哪些?如果不是,从前者到后者的翻译程序究竟是什么?
简单片段着色器的One example仅提供黑屏。在我的特定情况下,我沿着这个最小的顶点着色器运行它:
precision mediump float;
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
attribute vec2 aTextureCoord;
varying vec2 vTextureCoord;
void main() {
vTextureCoord = aTextureCoord;
gl_Position = uMVPMatrix * aPosition;
}
答案 0 :(得分:3)
这个问题与WebGL和OpenGL ES没有区别,它是由GLSL Sandbox Gallery和Shadertoy等网站提供的着色器编程环境与相应的环境(或缺少环境)之间的区别。您选择的OpenGL ES平台。
您在Web上看到的各种WebGL片段着色器沙箱通过统一变量为着色器代码提供输入。当您在另一个平台上开发自己的OpenGL ES应用程序时,您需要自己提供这些输入。
您链接到的沙箱网站在其JavaScript代码中提供time
,mouse
,resolution
和backbuffer
制服,方法是计算适当的值并将其传递给{ {1}}或类似的函数(首先编译着色器,然后在编译的程序中查找每个统一名称的数字位置)。在另一个平台上,您需要使用平台提供的OpenGL ES绑定来执行相同的操作。