将WebGL片段着色器转换为GLES

时间:2013-10-28 20:05:28

标签: opengl-es opengl-es-2.0 webgl

我是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;
}

1 个答案:

答案 0 :(得分:3)

这个问题与WebGL和OpenGL ES没有区别,它是由GLSL Sandbox GalleryShadertoy等网站提供的着色器编程环境与相应的环境(或缺少环境)之间的区别。您选择的OpenGL ES平台。

您在Web上看到的各种WebGL片段着色器沙箱通过统一变量为着色器代码提供输入。当您在另一个平台上开发自己的OpenGL ES应用程序时,您需要自己提供这些输入。

您链接到的沙箱网站在其JavaScript代码中提供timemouseresolutionbackbuffer制服,方法是计算适当的值并将其传递给{ {1}}或类似的函数(首先编译着色器,然后在编译的程序中查找每个统一名称的数字位置)。在另一个平台上,您需要使用平台提供的OpenGL ES绑定来执行相同的操作。